页面被动态更改时重新加载firefox插件

时间:2016-06-22 12:49:44

标签: javascript firefox-addon-sdk firefox-webextensions

我正在尝试使用WebExtensions编写我的第一个Firefox插件(对于第一个扩展,它非常复杂)。我需要在会话中处理所有Google搜索的结果(会话=使用相同Google页面的查询)。我有以下代码:

的manifest.json:

{
  "manifest_version": 2,
  "name": "MyAddon",
  "version": "0.0.1",

  "description": "My Add-on",
  "icons": {
      "48": "icons/icon-48.png"
  },

  "applications": {
      "gecko": {
          "id": "myaddon@local",
          "strict_min_version": "42.0"
      }
  },

  "content_scripts": [
    {
      "matches": ["*://www.google.com/*"],
      "js": ["index.js"]
    }
  ]
}

index.js:

var pageUrl = window.location.href;

var req = new XMLHttpRequest();
req.open("GET", pageUrl, true);
req.onreadystatechange = function() {
    if(req.readyState == 4 && req.status == 200) {
        handleResponse(req.responseText);
    };
};
req.send();

function handleResponse(pageContent) {
    // Do some processing ...
}

它完全符合我第一次搜索所需(使用地址栏)。但是,加载项会在我第一次进入Google页面时加载,执行它所拥有的内容,然后停止。它只在我刷新页面或从地址栏进行另一个查询时重新加载。

当我使用搜索字段进行另一次搜索并再次进行处理时,我需要找到一种重新加载加载项的方法,但不会丢失之前搜索的工作。我想我必须使用cookies,但我还没有。

我尝试使用req.addEventListener("load", someFunction)代替/ req.onreadystatechange(),但它并没有解决问题。有任何想法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

至于你的第一个问题,关于数据的保存,你总是可以使用storage来存储那些数据,或者与后台页面进行通信并在那里存储数据(除非你需要在浏览器重启时使用它,其中你应该使用存储的情况)。

“加载”页面时遇到的问题是它根本没有加载。页面本身已加载到浏览器中,它将保持不变(您提到的ready-state将不会更改),直到您离开。真正改变的只是页面上的内容。您应该为Google搜索按钮(或搜索字段中的onClick的监听器或搜索字段的change事件)创建Enter pressed监听器。 此外,您可能需要考虑使用jQuery来帮助您。