我正在尝试使用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()
,但它并没有解决问题。有任何想法吗?
谢谢!
答案 0 :(得分:0)
至于你的第一个问题,关于数据的保存,你总是可以使用storage来存储那些数据,或者与后台页面进行通信并在那里存储数据(除非你需要在浏览器重启时使用它,其中你应该使用存储的情况)。
“加载”页面时遇到的问题是它根本没有加载。页面本身已加载到浏览器中,它将保持不变(您提到的ready-state
将不会更改),直到您离开。真正改变的只是页面上的内容。您应该为Google搜索按钮(或搜索字段中的onClick的监听器或搜索字段的change
事件)创建Enter pressed监听器。
此外,您可能需要考虑使用jQuery来帮助您。