我想在带有chrome-extension:// URL的iframe上运行内容脚本。我在manifest.json中添加了一行,我从文档http://code.google.com/chrome/extensions/match_patterns.html
中复制了一行 chrome-extension://*/*
但是当我重新加载我的扩展程序时,我会收到警报:
Could not load extension from '/work/sirius/extension'.
Invalid value for 'content_scripts[2].matches[0]': Invalid scheme.
知道如何解决这个问题吗?
答案 0 :(得分:8)
没有。内容脚本声明只能匹配ftp:
,file:
,http:
和https:
。
matches
和exclude_matches
字段中的任何网址格式都被拒绝(在尝试加载扩展程序时生成错误)。
忽略permissions
option in the manifest file处的无效模式。
如果要在扩展程序的标签页上运行脚本,请在后台脚本中使用chrome.extension.getViews
。
更好的是,设计您的扩展程序页面,使其effectively communicate with each other (example)。
答案 1 :(得分:8)
我遇到了完全相同的问题,请查看API http://code.google.com/chrome/extensions/match_patterns.html,它清楚地表明他们接受chrome-extension://*/*
但他们却不接受。{/ p>
他们需要更新API,以免混淆人们。
答案 2 :(得分:5)
似乎Chrome作者已经默默地删除了将内容脚本注入chrome-extension:
页面的功能。 Documentation仍然说它有效,甚至包含 chrome-extension:方案的示例,但实际上它不起作用。因此,现在只有http:
,https:
和ftp:
可以在“框中”工作,如果您的扩展程序的用户在扩展程序上启用了此功能,则file:
可以正常工作(chrome:// extensions) /)页面。
更新:现在上面提到的文档已经更新,并且没有说明将内容脚本注入chrome-extension:
页面的能力。
答案 3 :(得分:0)
您可以将js注入到iframe html(chrome-extension:
页)中,而无需在manifast.json
中声明。注入的js可以直接访问Chrome API。
iframe.html:
<!DOCTYPE html>
<html>
<head>
...
</head>
<body>
...
</body>
<script src="iframe.js"></script>
</html>
iframe.js:
console.log(chrome); // {loadTimes: ƒ, csi: ƒ, …}