Gus*_*eno 6 firefox xul firefox-addon
我想刮掉SO的用户页面,给我的工具栏的所有者提供关于他们的问题/答案/等的更新信息......
这意味着我需要在后台执行此操作,解析页面,提取内容,将其与上次运行进行比较,然后在工具栏或状态栏上显示结果,或者在某些弹出窗口中显示结果类.所有这一切都必须在用户处理他的业务时不要被打断甚至是在SO上.
我在谷歌和Mozilla Wiki上都进行了相当彻底的搜索,以获得某种暗示.我甚至已经下载了一些我想做同样的其他扩展程序.不幸的是,我没有时间浏览所有这些和我看过的,都使用数据API(服务,Web服务,XML),而不是html报废.
老问题文本
我正在寻找一个好地方来学习如何在一个名为buy臭名昭着的set_timeout()的函数中加载页面来处理后台的屏幕抓取.
我的想法是在状态栏扩展中显示这种抓取的结果,以防万一从上次运行中发生任何变化.
是否有隐藏的叠加或其他一些诡计?
对于XUL/Firefox,你需要的是nsIIOService接口,你可以这样得到:
var mIOS = Components.classes["@mozilla.org/network/io-service;1"].
getService(Components.interfaces.nsIIOService);
Run Code Online (Sandbox Code Playgroud)
然后你需要创建一个频道,并打开一个异步链接:
var channel = mIOS.newChannel(urlToOpen, 0, null);
channel.asyncOpen(new StreamListener(), channel);
Run Code Online (Sandbox Code Playgroud)
这里的关键是StreamListener对象:
var StreamListener = function() {
return {
QueryInterface: function(aIID) {
if (aIID.equals(Components.interfaces.nsIStreamListener) ||
aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
aIID.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_NOINTERFACE;
onStartRequest: function(aRequest, aContext)
{ return 0; },
onStopRequest: function(aRequest, aChannel /* aContext */, aStatusCode)
{ return 9; },
onDataAvailable: function(aRequest, aContext, aStream, aOffset, aCount)
{ return 0; }
};
}
Run Code Online (Sandbox Code Playgroud)
你必须填写在细节onStartRequest,onStopRequest,onDataAvailable功能,但这应该足以让你去.你可以看看我在Firefox扩展中如何使用这个界面(它叫做IdentFavIcon,它可以在mozilla附加组件网站上找到).
我不确定的部分是如何不时触发此页面请求, set_timeout()应该可能有效.
编辑:
HTH.
| 归档时间: |
|
| 查看次数: |
1867 次 |
| 最近记录: |