我只能看到如何在顶级框架或特定标签的所有框架中执行脚本:
chrome.tabs.executeScript(integer tabId, object details, function callback)
如果details.allFrames
是true
,那么它将在每个子帧中执行,但如果它是假,则它将仅在顶级帧中执行。如何提供frameId
来执行脚本?
答案 0 :(得分:5)
据我所知,你不能。相反,设置allFrames: true
并在内容脚本中编写javascript以检测它是否是正确的帧,如果它不是正确的帧,则返回而不做任何事情。
答案 1 :(得分:2)
这是我解决同样问题的途径:
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);
});
}
答案 2 :(得分:2)
如果allFrames为true,则表示应将JavaScript或CSS注入当前页面的所有帧。默认情况下,它为false,仅注入顶部框架。如果设置为true且设置了frameId,则代码将插入所选框架及其所有子框架中。
答案 3 :(得分:1)
自Chrome 39起,有一个名为frameId
的可选参数。
chrome.webNavigation.onCompleted.addListener(function(e) {
chrome.tabs.executeScript(e.tabId, {
frameId: e.frameId, // <== LOOK HERE
code: "console.log('hello');"
});
});