2012-06-26 12 views
6

में स्क्रिप्ट निष्पादित मैं केवल कैसे शीर्ष स्तर फ्रेम में या एक निश्चित टैब में सभी फ्रेम में एक स्क्रिप्ट निष्पादित करने के लिए देख सकते हैं:विशिष्ट फ्रेम

chrome.tabs.executeScript(integer tabId, object details, function callback) 

कहाँ अगर details.allFramestrue तो है यह प्रत्येक में क्रियान्वित की जाएगी उपफ्रेम, लेकिन यदि यह गलत है, तो यह केवल शीर्ष स्तर के फ्रेम में निष्पादित होगा। स्क्रिप्ट निष्पादित करने के लिए मैं frameId कैसे प्रदान कर सकता हूं?

उत्तर

5

जहाँ तक मुझे पता है, आप नहीं कर सकते। इसके बजाय, allFrames: true सेट करें और यह जानने के लिए सामग्री स्क्रिप्ट में जावास्क्रिप्ट लिखें कि यह सही फ्रेम है या नहीं, और यह सही फ्रेम नहीं है, तो कुछ भी किए बिना वापस लौटें।

+0

मुझे लगता है कि ऐसा करना होगा ... श्वास। यह पता लगाने पर कोई सुझाव है कि चीज किस चीज को निष्पादित कर रही है? – Daniel

+0

आप सामग्री स्क्रिप्ट में दस्तावेज़ यूआरएल प्राप्त कर सकते हैं और जांच सकते हैं कि यह स्क्रिप्ट है जिसे आप चाहते हैं – Siddhi

+3

यह सब गलत लगता है - आप 'frameId' क्यों निर्दिष्ट नहीं कर सकते? ठीक है, मैं चमकना बंद कर दूंगा। – Daniel

2

इस मार्ग मैं इस एक ही समस्या को हल करने के लिए चला गया है:

https://github.com/Rob--W/chrome-api/blob/master/chrome.tabs.executeScriptInFrame/chrome.tabs.executeScriptInFrame.js

function alertCookie(tabId, frameId) { 
chrome.tabs.executeScriptInFrame(tabId, { 
    frameId: frameId, 
    code: '// This code runs in one frame, specified via frameId \n' + 
      'alert(location.href);' + 
      'document.cookie;' 
}, function(results) { 
    if (!results) { 
     alert('Failed to execute code. See background page for details.'); 
     return; 
    } 
    var cookie = results[0]; 
    alert('Found cookie: ' + cookie); 
}); 

}

1

documentation

से तो allFrames सच है, संकेत मिलता है कि जावास्क्रिप्ट या सीएसएस को वर्तमान पृष्ठ के सभी फ्रेम में इंजेक्शन दिया जाना चाहिए। डिफ़ॉल्ट रूप से, यह झूठा है और केवल शीर्ष फ्रेम में इंजेक्शन दिया जाता है। यदि सत्य और frameId सेट है, तो कोड चयनित फ्रेम और उसके सभी बच्चे के फ्रेम में डाला गया है।

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