javascript - Background.js 找不到使用内容脚本注入(inject)的内容

标签 javascript google-chrome google-chrome-extension

我的 Chrome 扩展程序有一个内容脚本,可以将自定义 DIV 注入(inject)当前页面。这部分有效。

但是,该扩展还有一个右键单击上下文菜单,单击该菜单时,应该以某种方式修改此注入(inject)的 DIV(比方说,向该 DIV 添加一些文本)。问题是找不到注入(inject)的内容。右键菜单处理程序位于Background.js 中,该文件对内容一无所知。

ma​​nifest.js

"content_scripts": [
    {
        "matches": [
            "http://*/*",
            "https://*/*"
        ],
        "css": ["contentstyle.css"],
    "js": ["jquery-1.11.2.min.js", "contentscript.js"],

"background": {
    "persistent": true,
    "scripts": ["background.js"]  
},     

contentscript.js

// Add Custom DIV - works OK
var div = document.createElement( 'div' );
div.id = 'infoDiv';
document.body.appendChild( div );
document.getElementById('infoDiv').innerHTML = 'TEST';

背景.js

// Add menu - gets added, but can't see Injected Content from here
chrome.contextMenus.create({
    "title": "My Right-Click Menu",
    "contexts": ["image"],
    "onclick" : changeDiv
  });

function changeDiv(e)
{
    var divHTML = document.getElementById('infoDiv').innerHTML;
    alert('Current HTML in DIV: ' + divHTML);
}

我无法从后台脚本获取 divHTML,存在某种错误并且没有警报框。背景和内容之间可以沟通吗?我被迫在后台脚本中实现菜单,对吧?

最佳答案

错误的文档位于

var divHTML = document.getElementById('infoDiv').innerHTML;

请阅读Architecture Overview第一的。您的后台脚本在单独的 HTML 文档中执行,因此不会“看到”选项卡中的页面。

您需要将值传递给内容脚本才能对可见页面执行某些操作。您可能需要Messaging .

关于javascript - Background.js 找不到使用内容脚本注入(inject)的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29931183/

相关文章:

javascript - Chrome Javascript 控制台 - 使用 console.log(obj) 引用对象输出?

google-chrome - 如何让复选框 "Allow access to file URLs"显示在我的应用程序旁边?我在 list 中有文件写入权限

linux - Native Messaging 主机尝试发送长度为 460151579 字节的消息

jquery - 无法使用 jQuery 从 DOM 访问 document.ready 元素?

javascript - 如何防止 MathJax 中的公式触摸事件?

javascript - AngularJS,ng-repeat + 过滤器从 Controller 调用

javascript - 如何在没有 tweetBox 的情况下以纯 javascript 发布推文

javascript - 包装成匿名函数后 JavaScript 代码不起作用

html - 尝试在 Chrome 与 FF/IE 下为自动高度 div 实现相同的功能

javascript - Chrome扩展程序: chrome.存储不保存任何内容