0

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

清单.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 页面时加载,执行它必须执行的操作,然后停止。只有当我刷新页面或从地址栏进行另一个查询时它才会重新加载。

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

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

谢谢!

4

1 回答 1

0

至于您的第一个问题,关于数据的保存,您始终可以使用存储来存储该数据,或者与后台页面通信并将数据存储在那里(除非您在浏览器重新启动时需要它,在这种情况下您应该求助于使用存储)。

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

于 2016-06-23T07:52:05.297 回答