2012-06-26 80 views
6

執行腳本,我只能看到如何在頂層框架或在某個標籤的所有幀執行腳本:在特定幀

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

在哪裏,如果details.allFramestrue那麼它會在每個被執行子幀,但是如果它是假的,它將只在頂層幀中執行。我如何提供frameId來執行腳本?

回答

5

據我所知,你不能。相反,請設置allFrames: true並在內容腳本中寫入javascript以檢測它是否是正確的幀,如果幀不是正確的幀,則返回而不執行任何操作。

+0

我想這將不得不......唉。有關檢測執行什麼框架的任何提示? – Daniel

+0

你可以在內容腳本中獲得文檔URL,並檢查它是否是你想要的腳本 – 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爲真,意味着JavaScript,或者CSS應該被注入到當前頁面的所有框架中。默認情況下,它是錯誤的,只被注入頂部框架。如果設置了true和frameId,則該代碼將插入到所選框架及其所有子框架中。