当frameId设置为

时间:2016-03-27 21:15:46

标签: google-chrome google-chrome-extension

我正在处理背景chrome扩展,并发现我无法将js或css插入到特定的框架中。根据当前的chrome.tabs API文档https://developer.chrome.com/extensions/tabs#method-executeScript

  

如果allFrames为true,则表示应将JavaScript或CSS注入当前页面的所有帧。默认情况下,它为false,仅注入顶部框架。如果设置为true且设置了frameId,则代码将插入所选框架及其所有子框架中。

我有一个有效的frameId用于调用,但无论details.frameId中设置的是什么,调用都会失败并出现以下错误:

chrome.tabs.executeScript(tabId, {
    code: 'document.body.style.backgroundColor="red"',
    allFrames: true,
    frameId: frameId
});

Error: Invalid value for argument 2. Property 'frameId': Unexpected property.

设置frameId = 0(始终是有效帧 - 顶部框架)仍然失败。我必须删除frameIdexecuteScript的{​​{1}}属性才能成功。这个记录的功能是否未实际实现?

3 个答案:

答案 0 :(得分:1)

根据错误报告,似乎这是一个错误,应该在Chrome 50中修复: https://bugs.chromium.org/p/chromium/issues/detail?id=63979

答案 1 :(得分:1)

经过进一步研究后,正如Rob W所说,文档错误... frameIdexecuteScript的支持和insertCSS 支持Chrome 39正如文件所述。从当前版本的Chrome 49(49.0.2623.110)开始,它不受支持。

我已成功让他们参与当前金丝雀版Chrome(51.0.2699.0)的工作。

更新: Chrome 50.0.2661.75支持frameIdexecuteScript中的insertCSS

答案 2 :(得分:0)

根据此github page,您需要将chrome.tabs.executeScriptInFrame方法添加到chrome.tabs API。此方法允许通过frameId参数在帧的上下文中运行内容脚本,而不是选项卡中的所有帧。

该方法遵循与chrome.tabs.executeScript,相同的语法,除了使用frameId属性扩展第一个参数(由InjectDetails类型指定)。由于frameId没有tabId没有意义,因此tabId参数是必需的。

  

注意:如果,您无法在框架中执行chrome.tabs.executeScript   您没有顶部框架的主机权限。