2009-11-05 6 views
8

Greasemonkey를 iframe에 대해서만 실행하고 부모 창에는 실행할 수 없는지 궁금합니다. 상위 창은 도메인 A이고, iframe은 도메인 B이며 스크립트의 포함은 @include http://domain-B.com/path/ *입니다.@include를 사용하는 iframe에 대한 Greasemonkey가 작동합니까?

부모와 상호 작용할 필요가 없습니다. 나는 성공없이 이것을 두 번 시도했다. 누군가가 iframe에 대해 실행하지 못하도록하는 도메인 간 제한이 있습니까?

추신 : iframe에는 맨 위 창으로로드되지 못하도록하는 JS 코드가 있습니다.

답변

11

iframe에 대해 Greasemonkey를 실행하는 것이 가능합니다. 실제로는 iframe 및 기본 페이지에서 실행을 중지하는 방법을 결정하기 위해 common question입니다. 당신은 상단 창에서 실행에서 코드를 방지하기 위해 그 대답의 역을 할 수 있어야한다 : 나는 그것을 테스트 한 당신이 도메인 B합니다 (iframe의 도메인)을 일치 @include을 사용할 수 있습니다

if (window.top == window.self) //don't run on the top window 
    return; 
//rest of the actual executing code goes here 

및 그것을 수정하는 임의의 코드 조각을 실행하십시오. test page에서 다음 테스트 사용자 스크립트를 실행했으며 성공적으로 Google 로고를 숨 깁니다 (Google이 iframe 인 경우에만).

// @include http://www.google.com* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js 
// ==/UserScript== 

if (window.top == window.self) //don't run on top window 
    return; 

alert('running on a frame'); 

$('img').each(function() { 
    $(this).hide(); 
}); 

내가 알 수있는 한 여기에는 교차 도메인 제한이 없습니다. 페이지가 처음로드 될 때 (Greasemonkey가 실행될 때) iframe이 존재하지 않으면 어떻게 될지 모르겠습니다.

+0

도메인 -b는 실행되지 않습니다. 브라우저의 도메인 간 제한으로 인해 문제가 발생했습니다. 도메인 간 제한 사항을 수행하고 도메인 -b에서 소스에 액세스 할 수 없습니다. 무언가가 존재하는지 확인하기 위해 DIV를 읽을 수 없습니다. @include 도메인 -b가 iframe (도메인 -b)에서 트리거되어 GM 스크립트를 통해 마크 업에 액세스 할 수 있기를 바랬습니다. 나는 다양한 접근법을 탐구 할 것입니다. – nopuck4you

+0

글쎄, 그것은 나를 위해 일했다 :'iframe' 도메인을'@include '할 때 제 3 자 도메인'iframe'에서 실행할 Greasemonkey 스크립트를 얻을 수 있습니다. 샘플 코드와 테스트 페이지를 사용하여 답변을 업데이트했습니다. – npdoty

관련 문제