将DOM元素从background.js传递给content_script.js

时间:2015-11-01 05:39:29

标签: javascript html google-chrome google-chrome-extension

(我将background.js称为 ba.js ,将content_script.js称为 cs.js

情景:

  1. cs.js 正在每个网页中注入。
  2. 用户可以单击上下文菜单按钮以在主网页上显示模式。
  3. 因此,这意味着每次点击按钮都会创建一个模态(有许多子元素和处理程序)。
  4. 所以,我决定在 ba.js 中创建一个元素,然后使用 chrome.tabs.sendMessage 将其作为消息传递给 cs.js < /强>
  5. 问题:

    cs.js 中正在接收空对象({})。请参阅 ba.js 的日志:

    enter image description here

    但是请看 cs.js 的日志:

    enter image description here

    问题:

    问题是什么以及如何将 ba.js 中的DOM元素发送到 cs.js

    相关代码:

    ba.js

    (function(){
        chrome.contextMenus.create({
            type: "normal",
            id: "x",
            title: "Click me!",
        });
    
        chrome.contextMenus.onClicked.addListener(function(info, tab){
            var id = info.menuItemId,
                url = info.pageUrl,
                elm = document.createElement("div");
    
            elm.classList.add("test");
            elm.appendChild(document.createElement("span"));
    
            console.log("Element", elm);
    
            if(id === "x"){     
                msg = {
                    task: "doWork",
                    elm: elm
                };
    
                chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
                    console.log(msg);
                    chrome.tabs.sendMessage(tabs[0].id, msg);
                });
            }
        }); 
    })();
    

    cs.js

    (function(){
        chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {          
            if(request.task === "doWork")
                console.log(request.elm);
        });
    })();
    

    Zip file of files to install and check manually

    我已经包含了所有相关信息。如果您觉得缺少某些东西,请告诉我。请包括经过深入研究的答案。谢谢!

0 个答案:

没有答案