Im通过内容脚本在网页中注入脚本。在脚本内部,我使用chrome.runtime.sendMessage成功地向后台脚本发送消息。但是我有扩展名硬编码。我将如何动态注入扩展名在网页中发送消息到后台脚本?如何动态发送Chrome扩展ID到消息传递的网页
chrome.runtime.sendMessage(extensionIdHardCoded, {
msg: data
},
function(response) {});
Im通过内容脚本在网页中注入脚本。在脚本内部,我使用chrome.runtime.sendMessage成功地向后台脚本发送消息。但是我有扩展名硬编码。我将如何动态注入扩展名在网页中发送消息到后台脚本?如何动态发送Chrome扩展ID到消息传递的网页
chrome.runtime.sendMessage(extensionIdHardCoded, {
msg: data
},
function(response) {});
首先,如果你已经有了一个内容脚本,你不必使用externally_connectable
交流 - 你可以use custom events与内容进行沟通脚本这会将其转发到背景。
这就是说,你可以使用chrome.runtime.id
和注入你的脚本之前将它传递给窗口背景:
var script = document.createElement('script');
script.textContent = "var extensionId = " + JSON.stringify(chrome.runtime.id);
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);
/* now inject your script */
或者,您可以添加将包含ID为内容的无形的DOM节点或一些属性并从注入的脚本中读取。
我采取了第一次注入包含扩展名的脚本的第一个路由,然后注入了其他需要使用扩展名的脚本。如果有人需要更多的信息以不同的方式通过内容脚本注入脚本[参考这篇文章](http://stackoverflow.com/a/9517879/3862212) – atom
使用chrome.runtime.id
这样的:
chrome.runtime.sendMessage(chrome.runtime.id, {
msg: data
},
function(response) {});
不幸的是,它必须硬编码。 –
@DanielHerr在这种情况下应该有什么安全措施?我的扩展只是在前端操作JS,并在网页和后台脚本之间进行回调。 – atom