Chrome扩展程序错误,尝试将数组从内容脚本发送到弹出脚本

帕特里克

我正在尝试查找用户当前正在使用的网页上的所有图像,并在用户单击扩展名时显示它们。我看了很多文章,似乎找到了执行此操作的最佳方法:激活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.sendMessagechrome.tabs.sendMessage

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Chome扩展:将chrome.storage数据从后台脚本发送到弹出窗口/内容脚本

来自分类Dev

Chome扩展:将chrome.storage数据从后台脚本发送到弹出窗口/内容脚本

来自分类Dev

Chrome扩展程序将消息从iFrame发送到事件页面,然后再发送到内容脚本

来自分类Dev

Chrome扩展程序将Background.js中的消息发送到内容脚本

来自分类Dev

在Chrome扩展程序的背景页面的onClick事件上将消息发送到内容脚本

来自分类Dev

在Chrome扩展程序中,如何将跨域消息从父内容脚本发送到特定子iframe中的内容脚本

来自分类Dev

Chrome扩展程序创建新标签页,并将消息从popup.js发送到新标签页的内容脚本

来自分类Dev

将chrome.storage中设置的值从选项页面发送到内容脚本

来自分类Dev

将sqlresult从后台发送到内容脚本

来自分类Dev

将文件(图像)的编辑数组发送到php脚本

来自分类Dev

如何使用sh脚本将输入发送到程序

来自分类Dev

如何使用sh脚本将输入发送到程序

来自分类Dev

将消息发送到Python脚本

来自分类Dev

将对象从后台脚本发送到内容脚本

来自分类Dev

Chrome扩展程序中内容脚本和弹出脚本之间的消息传递

来自分类Dev

在内容脚本中定义但无法在弹出窗口中访问的脚本(Chrome扩展程序)

来自分类Dev

Chrome扩展程序:如何全局捕获/处理内容脚本错误?

来自分类Dev

将按钮注入网站(Chrome扩展程序内容脚本)

来自分类Dev

Chrome扩展程序:将数据发送到使用chrome.windows.create创建的窗口

来自分类Dev

通过Bash脚本将内容发送到剪贴板

来自分类Dev

在Chrome扩展程序中停止内容脚本

来自分类Dev

使用JavaScript将数组发送到弹出窗口

来自分类Dev

Chrome扩展程序:消息传递(将DOM发送到popup.js)返回“空”

来自分类Dev

Chrome扩展程序:将AJAX表单发送到Rails应用

来自分类Dev

将邮件从devtools面板发送到Chrome扩展程序中的新标签页

来自分类Dev

无法在Chrome扩展程序中使用postMessage从父窗口将数据发送到iframe

来自分类Dev

Chrome扩展程序:将AJAX表单发送到Rails应用

来自分类Dev

chrome扩展程序将选定的文本发送到其他网站

来自分类Dev

Chrome扩展程序:消息传递(将DOM发送到popup.js)返回“空”

Related 相关文章

  1. 1

    Chome扩展:将chrome.storage数据从后台脚本发送到弹出窗口/内容脚本

  2. 2

    Chome扩展:将chrome.storage数据从后台脚本发送到弹出窗口/内容脚本

  3. 3

    Chrome扩展程序将消息从iFrame发送到事件页面,然后再发送到内容脚本

  4. 4

    Chrome扩展程序将Background.js中的消息发送到内容脚本

  5. 5

    在Chrome扩展程序的背景页面的onClick事件上将消息发送到内容脚本

  6. 6

    在Chrome扩展程序中,如何将跨域消息从父内容脚本发送到特定子iframe中的内容脚本

  7. 7

    Chrome扩展程序创建新标签页,并将消息从popup.js发送到新标签页的内容脚本

  8. 8

    将chrome.storage中设置的值从选项页面发送到内容脚本

  9. 9

    将sqlresult从后台发送到内容脚本

  10. 10

    将文件(图像)的编辑数组发送到php脚本

  11. 11

    如何使用sh脚本将输入发送到程序

  12. 12

    如何使用sh脚本将输入发送到程序

  13. 13

    将消息发送到Python脚本

  14. 14

    将对象从后台脚本发送到内容脚本

  15. 15

    Chrome扩展程序中内容脚本和弹出脚本之间的消息传递

  16. 16

    在内容脚本中定义但无法在弹出窗口中访问的脚本(Chrome扩展程序)

  17. 17

    Chrome扩展程序:如何全局捕获/处理内容脚本错误?

  18. 18

    将按钮注入网站(Chrome扩展程序内容脚本)

  19. 19

    Chrome扩展程序:将数据发送到使用chrome.windows.create创建的窗口

  20. 20

    通过Bash脚本将内容发送到剪贴板

  21. 21

    在Chrome扩展程序中停止内容脚本

  22. 22

    使用JavaScript将数组发送到弹出窗口

  23. 23

    Chrome扩展程序:消息传递(将DOM发送到popup.js)返回“空”

  24. 24

    Chrome扩展程序:将AJAX表单发送到Rails应用

  25. 25

    将邮件从devtools面板发送到Chrome扩展程序中的新标签页

  26. 26

    无法在Chrome扩展程序中使用postMessage从父窗口将数据发送到iframe

  27. 27

    Chrome扩展程序:将AJAX表单发送到Rails应用

  28. 28

    chrome扩展程序将选定的文本发送到其他网站

  29. 29

    Chrome扩展程序:消息传递(将DOM发送到popup.js)返回“空”

热门标签

归档