我正在尝试查找用户当前正在使用的网页上的所有图像,并在用户单击扩展名时显示它们。我看了很多文章,似乎找到了执行此操作的最佳方法:激活popup.js脚本后将消息告知content.js脚本,然后让content.js脚本获取图像并将其发送回去到popup.js脚本。但是,我总是得到一个错误(如下所示)。这些是相关文件:
manifest.json
{
"manifest_version": 2,
"name": "Picture Finder",
"version": "1.0",
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"],
"run_at": "document_end",
"all_frames": false
}
],
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"background": {
"scripts": ["background.js"]
},
"permissions": [
"tabs"
]
}
popup.html
<!DOCTYPE html>
<html>
<head>
<title>Picture Finder</title>
<script src="popup.js"></script>
</head>
<body>
<h1><center>Picture Finder</center></h1>
<img id="pic" src="" height="400" width="400">
</body>
</html>
popup.js
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.runtime.sendMessage(tabs[0].id, {type: "getContent"},
function(response) {
console.log(response); //this never gets logged
document.getElementById('pic').src = response[0].src;
});
});
content.js
var picArray = document.getElementsByTagName("img");
var srcArray = [];
for(var i = 0; i < picArray.length; i++){
srcArray.push(picArray[i].src);
}
//console.log(picArray); //this gets logged correctly
chrome.runtime.onMessage.addListener(function (message, sender, sendResponse) {
switch(message.type){
case "getContent":
console.log(srcArray);//this never gets logged
sendResponse(srcArray);
break;
default:
console.error("unexpected message: ", message);
}
});
我发现点击扩展程序并对其进行检查时收到以下错误:
响应tabs.query时出错:错误:参数3的值无效。属性'type':意外的属性。在chrome-extension://mhnnhbbcahnfjmfgofalcmikdedelicg/popup.js:1:13处
我对开发chrome扩展程序还很陌生,对如何解决这个问题真的一无所知。该错误似乎表明回调函数是chrome.tabs.query中的无效参数,但我不确定如何。感谢帮助。请注意,我的background.js脚本是一个空文件。
您尝试执行的操作无论如何都不会起作用,因为您无法通过Messaging传递DOM节点(该节点不是JSON可序列化的)。
您应该只传递您关心的属性,例如,如果需要src
-提取它们的数组并传递该数组。
更新:啊,我现在看到错误的原因。您正在使用chrome.runtime.sendMessage
,而在这种情况下,你应该使用chrome.tabs.sendMessage
-它扼流圈无效调用(第一个参数,如果存在的话,应该是一个字符串-你试图通过一些,所以它解释为消息,然后对象弄混了)。
要修复,只需替换chrome.runtime.sendMessage
为chrome.tabs.sendMessage
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句