以下是我的活动页面中的代码:
chrome.runtime.onInstalled.addListener(function (){
chrome.contextMenus.create
({
"title": "Test",
"contexts": ["all"],
"id": "menu"
});
chrome.contextMenus.create
({
"title": "Dummy",
"contexts": ["all"],
"id": "dummy",
"parentId": "menu"
});
});
chrome.contextMenus.onClicked.addListener(onClickHandler);
function onClickHandler (info, tab) {
if(info.menuItemId == "dummy"){
chrome.tabs.sendMessage(tab.id, {greeting: "hello"}, function(response) {
console.log(response.farewell);
});
}
}
以下是我的内容脚本中的代码,直接来自chrome消息传递文档:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url :
"from the extension");
if (request.greeting == "hello")
sendResponse({farewell: "goodbye"});
});
正在触发事件页面中的onClickHandler,但似乎sendMessage方法无效。 onMessage侦听器未接收任何信息,因此它不会将任何内容记录到控制台,甚至不会发送响应。这会导致原始的sendMessage回调抛出异常,因为甚至没有定义response.farewell。有谁知道为什么代码似乎不起作用。
错误:
Error in event handler for (unknown): TypeError: Cannot read property 'farewell' of undefined
答案 0 :(得分:1)
事实证明,内容脚本或事件页面中的代码没有问题。
这个帖子:Chrome extension Content Script not loaded until page is refreshed
帮助我意识到内容脚本没有运行,因为我正在测试它的网站,并且因为它没有运行它显然无法监听任何事件。
答案 1 :(得分:1)
对于其他有问题的人,我的问题是尝试使用@media only screen and (max-device-width: 1024px)
and (min-device-width: 361px) {
.contact_center_image{
position: relative;
margin-left: 23%;
bottom: 50px;
}
.image_size{
width: 1000px;
height: 700px;
}
}
@media only screen and (max-device-width: 360px){
.contact_center_image{
position: relative;
margin-left: 20%;
bottom: 50px;
}
.image_size{
width: 400px;
height: 300px;
}
}
API将消息发送到内容脚本。
要向内容脚本发送消息,您必须使用chrome.runtime
,例如:chrome.tabs
:
从扩展名向内容脚本发送请求看起来非常 相似,不同之处在于您需要指定将其发送到哪个标签。
将一条消息发送到指定选项卡中的内容脚本, 带有一个可选的回调,用于在响应返回时运行。
API文档:https://developer.chrome.com/extensions/tabs#method-sendMessage