我可以将数据从我的网页传递到Chrome扩展程序。我的代码如下。
var id = "myExtensionId";
chrome.runtime.sendMessage(id, { messageFromWeb: "Sample message" }, function (response) {
});
我可以在扩展端获取标签ID。但是,如何将数据从扩展名发送回标签?以下代码是否正确?
chrome.runtime.onMessageExternal.addListener(
function(request, sender, sendResponse) {
if (request.messageFromWeb) {
console.log(request.messageFromWeb);
}
chrome.tabs.sendMessage(sender.tab.id,{ greeting: "hello" });
}
);
代码chrome.tabs.sendMessage(sender.tab.id,{ greeting: "hello" });
不会抛出错误。
应该如何在网页上收听来自扩展程序的活动?
答案 0 :(得分:6)
因为内容脚本和网站中的脚本可以看到相同的DOM,所以您可以使用它来在它们之间进行通信。就像这样简单:
// data you want to sent
var data = {
random: 'Some data',
more: 'More data'
};
// send data through a DOM event
document.dispatchEvent(new CustomEvent('csEvent', {detail: data}));
// Listen you CRX event
document.addEventListener('csEvent', function (event) {
var data = event.detail;
// Do something with you data from CRX
});
如何操作取决于您需要的连接类型:一次性或长期。来自Chrome开发者页面Messaging:
有一个用于一次性请求的简单API和一个更复杂的API,它允许您使用长期连接来与共享上下文交换多个消息。
如果您只想发回一个回复,这是一个例子:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url :
"from the extension");
sendResponse({farewell: "Message back!"});
});
已编辑将内容脚本添加到网站脚本方式