2017-09-18 4 views
1

링크를 여는 코드가 있습니다. 링크를 구성 할 수 있으므로 일부 기본적인 오류 처리를하고 있습니다. 특히 window.open() 호출을 try/catch로 래핑하는 중입니다. URL이 유효하지 않은 경우 기본 제공 API가 예외를 throw하기 때문입니다. 문제는 사파리에서 캐치가 맞지 않는다는 것입니다.Safari에서 window.open() 예외를 catch 할 수 없습니다.

Safari API를 살펴 보았지만 좋은 정보를 찾을 수 없습니다.

아래 예제는 IE와 Chrome에서는 잘 작동하지만 Safari에서는 정상적으로 작동하지 않습니다.

$(function() { 
 
    $('button').on("click", function() { 
 
    try { 
 
     var begin = "http://<"; 
 
     var opentag = "script>"; 
 
     var stuff = "function(){alert('unsafe');}"; 
 
     var all = begin + opentag + stuff; 
 
     window.open(all); 
 
    } catch (e) { 
 
     alert("errr"); 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button> 
 
Click ME 
 
</button>

+1

각각의 윈도우가 다른 윈도우와 비동기 적으로 실행 자신의 자바 스크립트 스레드에서 작동합니다. – Barmar

+0

다른 창에서 실행되는 코드의 문제는 아닙니다. 즉, 열어야 할 URL이 유효하지 않을 수 있으며 예외 인 경우 예외를 catch하려고합니다. – RodgerTheGreat

답변

1

Barmar의 의견은 내가 생각하는 권리입니다. Window.open()의 반환 값을 가져 와서 반환했는지 확인하는 것이 주위의 방법입니다. 그렇지 않다면 아마도 창을 열지 않았을 것입니다. 여기 window.open() 문서를 읽어 https://developer.mozilla.org/en-US/docs/Web/API/Window/open

$(function() { 
    $('button').on("click", function() { 
    var x = null; 
    try { 
     var begin = "http://<"; 
     var opentag = "script>"; 
     var stuff = "function(){alert('unsafe');}"; 
     var all = begin + opentag + stuff; 

     x = window.open(all); 
    } catch (e) { 
     alert("errr"); 
    } finally { 
     if (!x) { 
     alert("errrrrrrrrr!"); 
     } 
    } 
    }); 
}); 
+1

비록 아직도 사파리가 이것을 어떻게하는지 모르겠지만 booleanCube의 대답은 오류를 "잡으려고"합니다. – RodgerTheGreat

관련 문제