2017-11-16 17 views
0

FF56의 greasemonkey 3.17과 Vivaldi의 tampermonkey에이 문제가 있습니다. Google을 통해이 문제에 관해서는 아무 것도 찾을 수 없습니다.userscript가 둘 이상의 탭에로드 될 때 자체를 차단합니다

스크립트 예 :

// ==UserScript== 
// @name  stackoverflow.com 
// @namespace siod87gbnwf87rnsfdkn 
// @include  https://stackoverflow.com/* 
// @version  1 
// ==/UserScript== 

alert(1); 
alert(2); 

당신이 매우 간단하고 하나의 메시지 상자를 제공해야하고, OK 두 번째를 클릭하면 볼 수 있듯이. 이것은 기본적으로하지만 지금은 문제에 대한 잘 작동 :

  • 이동

  • 를 사용하여 마우스 가운데 버튼을 두 개의 다른 후 직접 두 번 새 탭에 질문을 열 유래 stackoverflow.com 할 수 있도록 두 번째 탭 다른 하나는 여전히 어떻게됩니까

를로드하는 동안 두 탭이 예상대로 첫 번째 탭에서 상자에서 확인을 클릭하면 확인을 클릭 할 때까지 popupbox가 "1"하지만 스크립트가 일시 중지됩니다 보여줄 것 열립니다 두 번째 탭의 팝업 상자. 두 번째 탭에서 확인을 두 번 클릭하면 첫 번째 탭의 alert이 트리거됩니다.

왜 스크립트가 서로 독립적으로 실행되지 않습니까? 이것은 alert과 아무 관련이 없습니다.이 스크립트는 좀 더 복잡한 스크립트에서이 문제가 있었지만 내 문제를 보여주기 위해 동일한 경고가 작동합니다.

답변

1

왜 스크립트가 서로 독립적으로 실행되지 않습니까?

그들은 글로벌 공간을 공유하지 않는다는 의미에서 "독립적으로"실행됩니다. 그러나 alert과 같은 블로킹 호출은 브라우저 자체에서 처리되며 ECMAScript 사양에서는 순서가 지정되지 않습니다.

하나의 "솔루션"은 alert과 같은 차단 호출을 사용하지 않는 것입니다. 대신 값을 인쇄해야하는 경우 console.log 또는 console.info을 사용하십시오.

+0

예 경고는 예입니다. 내 실제 스크립트에는 여러 링크를 빠르게 연 다음 문제가 발생하여 실행되지 않습니다. 하지만 greasemonkey가 새로 열린 각 탭에서 스크립트를 실행하는지 확인하기 위해 console.log()를 사용해 보았습니다. 그래서 오류는 내 실제 스크립트의 어딘가에 있어야합니다. 비록 내가 블로킹을 사용하지 않는다고 생각합니다. 나는 더보아야 할 것이다. 이 예제가 실행되지 않는 이유에 대해 문제를 해결해 주셔서 감사합니다. – user136036

관련 문제