过去两天我一直在尝试让这个工作,作为最后的手段,我在这里问。我查看了StackOverflow上与消息传递相关的所有相关帖子,一些博客以及谷歌的消息传递页面。
我构建的APP将在包含某些内容的页面中查找链接并替换它的开头。例如,将在网址中查找“google.com”并将“start.com”替换为“ask.com”。
我遇到的问题是我想将此变量存储在似乎发生的localstorage变量中。但是,当刷新页面时,未使用传递的新URL。我已经删除了一些杂乱的东西来制作一个简化的版本,以便更容易调试。请帮忙!很快就会留下头发!
localStorage["talktest1"]
包含一个应该更改为从popup.js传递的新URL的URL。然后,当接下来加载替换脚本时,它应该使用新的talktest1
变量,但是它继续使用旧的“www.google.co.uk”变量。
Manifest.js
:
{
"name": "Talk Talk",
"version": "1.0",
"description": "Tests stuff.",
"browser_action": {
"default_icon": "img/icon16.png",
"default_popup": "popup.html"
},
"options_page": "options.html",
"permissions": [
"tabs", "*://*/*"
],
"background": {
"scripts": ["js/jquery-1.7.2.min.js","js/bg.js"]
},
"icons": { "16": "img/icon16.png",
"48": "img/icon48.png",
"128": "img/icon128.png" },
"content_scripts": [
{
"matches": ["*://*/*"],
"js": ["js/jquery-1.7.2.min.js","js/bg.js"],
"run_at": "document_end"
}
]
}
popup.js
:
$(document).ready(function() {
chrome.extension.getBackgroundPage().alert_this();
$('.link_change').click(function() { // when a link is clicked - url is grabbed from a 'href'
chrome.extension.sendRequest({localstorage: "http://www.something.com"}, function(response) {
var email = response.value;
chrome.extension.getBackgroundPage().alert_this();
});
return false;
});
});
bg.js
:
if(!talktest1){
var talktest1;
}
if(!localStorage["talktest1"]){
localStorage["talktest1"] = "http://www.google.co.uk";
}
talktest1 = localStorage["talktest1"];
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) {
localStorage["talktest1"] = request.localstorage;
talktest1 = request.localstorage;
sendResponse({value: localStorage.talktest1});
}
);
function alert_this(){
alert("localstore|" + localStorage["talktest1"]);
alert("talktest1|" + talktest1);
}
$("a[href*='google.com']").each(function(){
this.href = this.href.replace('http://www.ask.com',talktest1);
});
答案 0 :(得分:0)
为什么使用bg.js
作为后台页面和内容脚本?它没有任何意义。 chrome.extension.onRequest
无法在内容脚本中使用,并在控制台上引发错误。将$("a[href*='google.com']")...
部分放入其他脚本(例如content.js
)并更新manifest.json
。
您尚未设置manifest_version
,默认值为1且background
设置不可用(source),只有background_page
}。
$('.link_change').click
中的popup.js
仅对点击的弹出窗口内的链接做出反应,而不是对网站的链接做出反应。这是你的意图吗? Popup过着自己的生活,对目前开放的网站一无所知。
我认为您无法在后台页面中显示alert()
。您的alert_this()
功能是否有效?
弹出窗口或bg页面是否有错误?你调试过了吗?你应该尝试在onRequest
监听器函数(bg.js)中设置一个断点,看看那里发生了什么(request.localstorage
,好吗?值是否设置正确?)。要调试背景页面,请使用Chrome扩展程序页面上的附加信息下的Inspect active views
选项。