尝试在我的background.js和contentscript.js之间进行通信
的manifest.json
{
"name": "xxx",
"version": "0.1",
"manifest_version": 2,
"permissions": [
"tabs"
],
"description": "xxx",
"icons": { "16": "icon16.png",
"48": "icon48.png",
"128": "icon128.png" },
"browser_action": {
"default_title" : "xxx",
"default_icon": "icon16.png",
"default_popup": "popup.html"
},
"background": {
"scripts": ["background.js"]
},
"content_scripts" : [
{
"matches" : [ "http://*/*" ],
"js" : [ "contentscript.js", "jquery.js" ]
}
]
}
background.js
var listePdt = {};
var selectedPdt = null;
var selectedId = null;
function updatePdt(tabId)
{
chrome.tabs.sendMessage(tabId, {}, function(pdt) {
chrome.pageAction.show(tabId);
});
}
chrome.tabs.onUpdated.addListener(function(tabId, change, tab) {
if(change.status == "complete")
updatePdt(tabId);
});
chrome.tabs.onSelectionChanged.addListener(function(tabId, info) {
selectedId = tabId;
// and other things
});
chrome.tabs.getSelected(null, function(tab) {
updatePdt(tab.id);
});
contentscript.js
if(window == top)
{
chrome.extension.onMessage.addListener(
function(req, sender, sendResponse) {
sendResponse(findPdt());
}
);
}
var findPdt = function() {
// operations on a string
return "string";
}
但是我在生成的后台页面的控制台中收到以下错误“端口错误:无法建立连接。接收端不存在”...不明白为什么。
任何帮助PLZ?
答案 0 :(得分:1)
最突出的一点是:
chrome.tabs.getSelected(null, function(tab) {
updatePdt(tab.id);
});
目前已弃用(请参阅here和here),新方式如下所示(请注意,还包含windowId: chrome.windows.WINDOW_ID_CURRENT
以说明您有多个Chrome的情况实例打开(我有很多,显然:))。
chrome.tabs.query(
{windowId: chrome.windows.WINDOW_ID_CURRENT, active: true}, function(tab) {
updatePdt(tab.id);
} );
但是,对于您的主要问题,此{(和getSelected
)会抛出您从Port
加载扩展时遇到的chrome://extensions
错误,New tab
屏幕,或任何其他“非标准”页面(书签,查看源,检查元素本身等),所以我会忽略它们。使用您的代码,重新加载扩展程序,打开Inspect Element窗口,然后转到浏览器中的另一个选项卡并重新加载页面 - 您应该看到所需的操作已完成(我添加了console.log(pdt);
调用作为{sendMessage
的一部分1}}调用,并返回请求的值。换句话说,一切似乎都正常工作:)