2013-12-19 2 views
1

이유는 모르겠지만 greasemonkey/tampermonkey 스크립트는 iframe이있는 페이지에서 실행을 거부합니다. 스크립트는 iframe 내부에서 실행되지만 루트 도메인에서는 실행되지 않습니다. @noframes 옵션을 사용하면 iframe이있는 페이지에서 아무런 변화가 없습니다.Tampermonkey/Greasemonkey가 iframe에서 실행 중임

심지어 // @match http://*/*

내 테스트 코드에 의존 한이

var script = document.createElement('script'); 
script.type = 'text/javascript'; 
script.src = document.location.protocol + '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'; 

document.getElementsByTagName('head')[0].appendChild(script) 

var title = $('title').html(); 
alert(title); 

은 iframe 대응의 이름으로 경고가 아니라 실제 사이트를 표시합니다 ... 매우 간단합니다. 나는 greasemonkey와 tampermonkey에서 시도했습니다.

+0

을 – kryo

답변

1
  1. 대상 부모 페이지는 실제 <head> 요소 해당 스크립트 인스턴스 충돌을 일으키는 원인이되지 않을 수도 있습니다.

  2. jQuery를 스크립트와 함께 추가하는 방법이 아닙니다. 모든 유형의 타이밍 문제와 코드 충돌이 발생합니다.
    this answer for the best cross-platform way to add jQuery의 두 번째 부분을 참조하십시오 (GM/TM 만 사용하는 경우 잔인 함). 그리고 this bit for resolving jQuery conflicts and crashes in GM/TM scripts.

    그것은 iframe을 독자적으로 jQuery를로드, 아니면 그냥 (지금은) 행복한 타이밍 사고를 가지고 있지만, 당신의 코드와 같은 행운에 의존하지 않는 것이있을 수 있습니다.

  3. 스크립트의 메타 데이터 섹션/헤더

    이 같은 질문에 대한 중요입니다. 귀하의 질문은 전체 스크립트를 보여줘야합니다.
    브라우저 콘솔의 오류 및 대상 페이지에 대한 링크가 잘못 표시되지 않습니다. 스크립트가 Tampermonkey/그리스 몽키 (NO 일반 크롬)에 대한 경우

이 작동합니다 : 내가 부모 페이지가 아닌 iframe을 액세스하기 위해 노력하고있어

// ==UserScript== 
// @name  _YOUR_SCRIPT_NAME 
// @include http://YOUR_SERVER.COM/YOUR_PATH/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js 
// @grant GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a design change 
    introduced in GM 1.0. It restores the sandbox. 
*/ 
var title = $('title').html(); 
alert(title); 
+0

원래 내가 그 코드를 사용했다 내가 크롬 콘솔을 사용하고 있기 때문에 jquery를 추가하는 것이지 tampermonkey가 아닙니다. @require 태그에 대한 정보를 보내 주셔서 감사합니다. 그것은 완벽하게 작동합니다. – kryo