我只能看到如何在顶级框架或某个选项卡的所有框架中执行脚本:
chrome.tabs.executeScript(integer tabId, object details, function callback)
where if details.allFrames
is true
then 它将在每个子帧中执行,但如果为 false,则只会在顶层帧中执行。我怎样才能提供一个frameId
来执行脚本?
我只能看到如何在顶级框架或某个选项卡的所有框架中执行脚本:
chrome.tabs.executeScript(integer tabId, object details, function callback)
where if details.allFrames
is true
then 它将在每个子帧中执行,但如果为 false,则只会在顶层帧中执行。我怎样才能提供一个frameId
来执行脚本?
据我所知,你不能。相反,allFrames: true
在内容脚本中设置和编写javascript来检测它是否是正确的框架,如果它不是正确的框架,则不做任何事情就返回。
这是我解决同样问题的路线:
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);
});
}
从文档
如果 allFrames 为真,则意味着应该将 JavaScript 或 CSS 注入到当前页面的所有框架中。默认情况下,它是 false 并且只注入到顶部框架中。如果设置了 true 和 frameId,则代码将插入所选框架及其所有子框架中。
从Chrome 39 开始,有一个可选参数名为frameId
.
chrome.webNavigation.onCompleted.addListener(function(e) {
chrome.tabs.executeScript(e.tabId, {
frameId: e.frameId, // <== LOOK HERE
code: "console.log('hello');"
});
});