2009-11-05 14 views
8

मुझे आश्चर्य है कि क्या आप Greasemonkey केवल iframe के खिलाफ निष्पादित कर सकते हैं और यह मूल विंडो नहीं है। मूल विंडो डोमेन ए है, iframe डोमेन बी है, और स्क्रिप्ट में शामिल @include http://domain-B.com/path/ * होगा।@include का उपयोग करते हुए एक आईफ्रेम के खिलाफ Greasemonkey - यह काम करता है?

मुझे माता-पिता के साथ किसी भी बातचीत की आवश्यकता नहीं है। मैंने सफलता के बिना इसे दो बार कोशिश की है। क्या कोई क्रॉस-डोमेन प्रतिबंध किसी को आईफ्रेम के खिलाफ निष्पादित करने से रोकता है?

पीएस: आईफ्रेम में जेएस कोड है जो इसे शीर्ष विंडो के रूप में लोड करने से रोकता है।

उत्तर

11

खैर, निश्चित रूप से Greasemonkey को iframe के विरुद्ध चलाने के लिए संभव है - वास्तव में, यह common question है यह निर्धारित करने के लिए कि इसे iframes के साथ-साथ मुख्य पृष्ठ पर निष्पादित करने से कैसे रोकें। आपको लगता है कि इस सवाल का जवाब की बातचीत लेने के लिए शीर्ष खिड़की पर क्रियान्वित करने से कोड को रोकने के लिए सक्षम होना चाहिए:

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

मैं इसे परीक्षण किया है और आप डोमेन बी (iframe के डोमेन) मैच के लिए @include उपयोग कर सकते हैं और मनमानी कोड का एक टुकड़ा चलाएं जो इसे संशोधित करता है। मैंने 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(); 
}); 

जहां तक ​​मैं कह सकता हूं, यहां कोई क्रॉस-डोमेन प्रतिबंध शामिल नहीं है। मुझे यकीन नहीं है कि क्या होता है यदि iframe पृष्ठ लोड होने पर मौजूद नहीं है (जो Greasemonkey चलाता है)।

+0

ब्राउज़र-बी कभी भी निष्पादित नहीं करता है क्योंकि ब्राउज़र में क्रॉस-डोमेन प्रतिबंधों की समस्या है। क्रॉस-डोमेन प्रतिबंधों और डोमेन-बी पर स्रोत तक पहुंच के लिए नहीं, मैं यह निर्धारित करने के लिए डीआईवी नहीं पढ़ सकता कि कुछ मौजूद है या नहीं। मैं उम्मीद कर रहा था कि @include डोमेन-बी iframe (जो डोमेन-बी है) पर ट्रिगर करेगा और इसलिए मुझे जीएम स्क्रिप्ट के माध्यम से मार्कअप तक पहुंच होगी। मैं विभिन्न दृष्टिकोणों का पता लगाना जारी रखूंगा। – nopuck4you

+0

ठीक है, यह मेरे लिए काम करता है: जब मैं 'iframe' डोमेन 'शामिल करता हूं तो मैं किसी तृतीय-पक्ष डोमेन' iframe' पर निष्पादित करने के लिए Greasemonkey स्क्रिप्ट प्राप्त कर सकता हूं। मैंने अपना जवाब नमूना कोड और एक परीक्षण पृष्ठ के साथ अद्यतन करने के लिए अद्यतन किया है। – npdoty

संबंधित मुद्दे