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