[英]Communication between scripts in Chrome Extension
我知道这个问题已经存在很多变种,但是似乎没有一个对我有用。
细节:
我正在编写一个扩展程序,该扩展程序可以从您以gmail发送的电子邮件中提取一些电子邮件数据。 为了实现此目的,我正在使用此版本的Gmailr https://github.com/joscha/gmailr 。
实际上,我有三个内容脚本:Gmailr.js和main.js(与上面的链接中的脚本几乎相同)允许我提取所需的信息。 然后,我使用content.js将消息发送到扩展的后台页面。
问题是从gmailr.js和main.js中我无法使用任何Chrome API,而且我不确定原因,因此无法将这些消息发送回后台页面。
这就是为什么我制作了可以与后台页面通信的content.js的原因。 但是,它似乎看不到其他内容脚本可以执行的任何操作。 例如,main.js在页面顶部插入一个div。 当我尝试将事件监听器附加到content.js的此div中的按钮上时,被告知不存在此类元素。
如何获取main.js提取的数据以供content.js查看? (我还尝试将数据放入本地存储,然后触发一个自定义事件侦听器,以告诉content.js读取本地存储,但是没有运气,因为它们似乎无法听到彼此触发的事件)。
任何见解或替代方案都将受到赞赏。
(如果需要,我可以发布代码,但是它是零散的并且很长)
我的清单文件:
{
"manifest_version": 2,
"name": "Email extractor",
"description": "Extracts data from emails",
"version": "1.0",
"background": {
"script": "background.js"
},
"content_scripts": [
{
"matches": [
"*://mail.google.com/*",
"*://*/*"
],
"js": [
"lib/yepnope.js/yepnope.1.5.4-min.js",
"lib/bootstrap.js",
"main.js",
"gmailr.js",
"content.js"
],
"css": [
"main.css"
],
"run_at": "document_end"
}
],
"permissions": [
"tabs",
"storage",
"background",
"*://mail.google.com/*",
"*://*/*"
],
"browser_action": {
"default_icon": "img/icon.png",
"default_popup": "popup.html"
},
"web_accessible_resources" : [
"writeForm.js",
"disp.js",
"/calendar/jsDatePick.min.1.3.js",
"/calendar/jsDatePick_ltr.min.css",
"lib/gmailr.js",
"lib/jquery-bbq/jquery.ba-bbq.min.js",
"content.js",
"main.js",
"background.js"
]
}
这是main.js:
Gmailr.init(function(G) {
sender = G.emailAddress();
G.insertTop($("<div id='gmailr'><span></span> <span id='status'></span>)");
el = document.getElementById("testid");
el.addEventListener('click', mg, false);
var status = function(msg) {
G.$('#gmailr #status').html(msg); };
G.observe(Gmailr.EVENT_COMPOSE, function(details) {
....
status(" user: " + user);
console.log('user:', user);
//now try to send a message to the background page
//this always returns the error that method sendMessage does not exist for undefined
chrome.runtime.sendMessage({greeting: "test from gmailr"}, function(response) {
console.log("did it send?");
});
});
});
gmailr.js很长,也不是我自己的代码,但是可以在这里看到: http : //pastebin.com/pK4EG9vh
您好,可能是您遇到问题的3个原因:
从main.js和gmailr.js向bgp发送消息的方式可能是错误的,因为您必须到达才能将任何内容脚本与bgp进行通信。 (在清单内容脚本密钥中,缺少gmailr.js)。 向我们展示您的代码会有所帮助。
从content.js搜索以访问在main.js中创建的元素时,您似乎遇到了问题。 您是否尝试使用jQuery $(“”)。on()方法访问元素? 一个简单的测试必须是在一个cs中声明一个函数,然后在另一个cs中使用它。 如果它不起作用,那就是明显的问题。 在清单内容脚本密钥中声明.js文件的顺序也很重要。
尝试在清单内容脚本数组“ run_at”中:“ document_end”
希望对您有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.