【发布时间】:2015-05-06 20:45:16
【问题描述】:
之前我有代码:
$.get(url, function(data){
var $response = $(data);
overallRating = $response.find("div.grade").eq(0).html();
arr[pos].rating = overallRating;
为了得到我正在寻找的数据。这在大多数情况下都有效,但我无法将值分配给 arr[pos]。我发现因为 $.get() 是异步的,所以我可以使用 chrome.runtime.onMesssage 和 .sendMessage 并使用回调函数来访问该值。所以我在后台脚本 tabcheck.js 中提出了这个:
chrome.runtime.onMessage.addListener(function(message, send, callback){
console.log("message recieved");
$.get(send.url , function(data){
console.log(data);
callback(data);
});
return true; //https://stackoverflow.com/questions/17246133/contexts-and-methods-for-communication-between-the-browser-action-background-sc
});
以及我的 popup.js 页面中的发送消息:
chrome.runtime.sendMessage('message', {url: url } , function(data) {
console.log(data);
var $response = $(data);
overallRating = $response.find("div.grade").eq(0).html();
arr[pos].rating = overallRating;
});
我认为正在发生的事情是在 onmessage 中没有访问 url。我记得收到类似于:Chrome Extention Port error: Could not establish connection. Receiving end does not exist 的错误,但不记得那是否是确切的错误。数据返回未定义
那么在第一个和第二个之间发生了什么变化会使新函数无法再访问该 url?我该如何解决?我的目标是将值 overAllRating 转换为 arr[pos].rating。
如有必要,这是我的清单:
{
"manifest_version": 2,
"name": "",
"description": "n",
"version": "1.0",
"background":{
"scripts": ["jquery-2.1.3.min.js","tabcheck.js"],
"persistent": false
},
"permissions":[
"tabs",
"https://www.myurl1/*",
"http://www.myurl2/*",
],
"browser_action": {
"default_icon": "icon.png",
"default_popup": "uv.html",
"default_title": ""
},
"content_scripts": [
{
"matches":["https://www.myurl/*"],
"js":["jquery-2.1.3.min.js","main.js"]
}
]
}
【问题讨论】:
标签: jquery ajax google-chrome google-chrome-extension