LocalStorage消息传递问题 - 几乎可以工作

时间:2012-06-04 01:07:42

标签: google-chrome google-chrome-extension local-storage message-passing

过去两天我一直在尝试让这个工作,作为最后的手段,我在这里问。我查看了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);
});

1 个答案:

答案 0 :(得分:0)

  1. 为什么使用bg.js作为后台页面和内容脚本?它没有任何意义。 chrome.extension.onRequest无法在内容脚本中使用,并在控制台上引发错误。将$("a[href*='google.com']")...部分放入其他脚本(例如content.js)并更新manifest.json

  2. 您尚未设置manifest_version,默认值为1且background设置不可用(source),只有background_page }。

  3. {li>

    $('.link_change').click中的popup.js仅对点击的弹出窗口内的链接做出反应,而不是对网站的链接做出反应。这是你的意图吗? Popup过着自己的生活,对目前开放的网站一无所知。

  4. 我认为您无法在后台页面中显示alert()。您的alert_this()功能是否有效?

  5. 弹出窗口或bg页面是否有错误?你调试过了吗?你应该尝试在onRequest监听器函数(bg.js)中设置一个断点,看看那里发生了什么(request.localstorage,好吗?值是否设置正确?)。要调试背景页面,请使用Chrome扩展程序页面上的附加信息下的Inspect active views选项。