문제

특정 조건에서는 iframe에서 열리는 웹 페이지가 있습니다. 해당 IFRAME에로드되면 파일을 다운로드하기 위해 윈도우 위치를 리소스로 설정해야합니다 (모두 GreasemonKey 스크립트를 업데이트하기 위해이 모든 것이 합법적 인 BTW). 불행히도, 내가 할 때 :

top.location.href = "http://userscripts.org/...";

상단이 널이라는 오류가 발생합니다. "상단"대신 "창"을 사용하면 Firefox는 스크립트 텍스트를 iframe에로드하지만 GreasemonKey는 어떤 이유로 업데이트로 감지 할 수 없습니다. 어떻게 든 놓친 창 위치를 설정하는 또 다른 방법이 있습니까?

편집 : 내 스크립트 사용자가 특정 비즈니스 페이지를 방문합니다 (첫 번째). 내 스크립트는 Greasemonkey라는 Firefox 플러그인을 사용하여 해당 페이지에로드되었습니다. 내 스크립트는 방문한 페이지에 iframe을 생성하고 내 페이지 (두 번째)를 해당 iframe에로드합니다. 그런 다음 GreasemonKey는 내 페이지에 내 스크립트를로드하여 내 페이지의 값을 확인하여 스크립트가 업데이트되었는지 확인합니다. 스크립트가 업데이트 된 경우 원래 방문한 사이트 ( "첫 번째"로 표시) 및 다른 (3 번째) 사이트 (Userscripts.org)로 사용자를 탐색해야합니다. 바라건대 이것은 약간의 혼란을 해결합니다.

도움이 되었습니까?

해결책

마침내 Greasemonkey가 지정된 URL과 함께 Firefox에서 새 탭을 열어주는 "gm_openintab (url)"함수를 제공한다는 것을 알았습니다. 이를 통해 Iframe은 GreasemonKey가 업데이트 할 업데이트 된 스크립트의 위치가있는 새 탭을 열 수 있습니다. 이것이 내가 찾고 있던 솔루션은 아니지만 오류없이 완벽하게 작동합니다.

GM_openInTab("http://userscripts.org/...") ;

입력 해 주신 모든 분들께 감사드립니다. Greasemonkey는 어떻게 든 샌드 박스가 스크립트를 통해 악의적 인 목적으로 사용할 수있는 이러한 종류의 행동을 방지 할 수 있습니다.

~ md5sum ~

다른 팁

두 위치는 동일한 호스트 이름 (도메인)을 가져야합니다. 사용하고 싶을 수도 있습니다 parent 대신에 top.

다음을 시도 할 수 있습니다 (내가 사용하는 것에 적합 함) :

function checkWebPage() {
    try {
        if (top != self) {
            top.location.href = "http://userscripts.org/...";
        } else {
            self.location.href = "http://userscripts.org/...";
        }
    } catch (e) {}
}

나는 iframe과 여러 번 일했고 문서의 상태와 함께 일하는 것이 더 안전하다는 것을 알았습니다. 예를 들어 코드를 전달하겠습니다.

이 예에서는 jQuery를 사용하고 있지만 기능에는 필요하지 않습니다.

<head>
<script>
(function($) {
 $.documentCtrolState = function(d,f,t)
 {
    try{
      t=(typeof(t)=="undefined")?100:t;
      if (d.readyState=="complete") //the document has been completely loaded, successfully or unsuccessfully
         f(true);
      else
         setTimeout(function(){$.documentCtrolState.call(this,d,f,t);}, t);
    }catch(ex){
         f(false, ex);
    }
 };
})(jQuery);

$(function(){

   $myIframeRef = $(document.myIFrame);
   $myIframeRef.attr("src", "mypage.php");

   $.documentCtrolState($myIframeRef.window.document, ThenLoadIFrame, 100);

});

ThenLoadIFrame = function(state, ex)
{
   alert("State " + state);
}


</script>
</head>
<body>
<iframe src="" id="myIFrame"></iframe>
</body>

UnsafeWindow.parent.location.href = URL; 내 Greasemonkey에서 일했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top