2015-12-22 130 views
1

Im通过内容脚本在网页中注入脚本。在脚本内部,我使用chrome.runtime.sendMessage成功地向后台脚本发送消息。但是我有扩展名硬编码。我将如何动态注入扩展名在网页中发送消息到后台脚本?如何动态发送Chrome扩展ID到消息传递的网页

chrome.runtime.sendMessage(extensionIdHardCoded, { 
     msg: data 
    }, 
    function(response) {}); 
+1

不幸的是,它必须硬编码。 –

+0

@DanielHerr在这种情况下应该有什么安全措施?我的扩展只是在前端操作JS,并在网页和后台脚本之间进行回调。 – atom

回答

5

首先,如果你已经有了一个内容脚本,你不必使用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节点或一些属性并从注入的脚本中读取。

+0

我采取了第一次注入包含扩展名的脚本的第一个路由,然后注入了其他需要使用扩展名的脚本。如果有人需要更多的信息以不同的方式通过内容脚本注入脚本[参考这篇文章](http://stackoverflow.com/a/9517879/3862212) – atom

1

使用chrome.runtime.id这样的:

chrome.runtime.sendMessage(chrome.runtime.id, { 
    msg: data 
}, 
function(response) {}); 
+1

您误解了设置。代码在页面级别执行,不再访问Chrome API(除了'sendMessage')。查看[从网页发送消息](https://developer.chrome.com/extensions/messaging#external-webpage) – Xan

+1

由于'chrome.runtime.id'被提及并且很有用,但我不会失望。 – Xan

相关问题