- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的扩展中,我需要处理部分 URL 被一些标记替换的书签。当用户打开这样的书签时,扩展应该用一些值替换这个标记并打开新的位置。为了实现这一点,我使用了 nsIWebProgressListener,如下所示:
bookmarksResolver: {
onLocationChange: function(aWebProgress, aRequest, aLocation, aFlags) {
if (aLocation) {
try {
// Replace markers
var resolvedLocation = resolveReferences(location);
if (resolvedLocation != location) { // Open new location if markers were found and replaced
aWebProgress.DOMWindow.location.replace(resolvedLocation);
}
}
catch(ex) {
//Logging error
}
}
},
/* Stubs for other listeners */
onStateChange: function(a, b, c, d) {},
onProgressChange: function(a, b, c, d, e, f) {},
onStatusChange: function(a, b, c, d) {},
onSecurityChange: function(a, b, c) {},
QueryInterface: function (aIID) {
if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
aIID.equals(Components.interfaces.nsIWebProgressListener2) ||
aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
aIID.equals(Components.interfaces.nsISupports)) {
return this;
}
else {
throw Components.results.NS_NOINTERFACE;
}
}
},
问题是,当我尝试替换 URL 中的标记时,如 https://[marker].site.com
我会显示一个奇怪的错误页面(说 netError 上存在语法错误。 xhtml),然后打开带有替换标记的 url,但地址栏一直显示 https://[marker].site.com
URL。
问题 #1:我在这里正确使用了 onLocationChange 吗?也许,应该使用另一种方法?
问题 #2:我该怎么做才能防止发生此错误?
UPD:使用 onStateChange 而不是 onLocationChange 并使用标志 STATE_TRANSFERRING | STATE_IS_DOCUMENT 因为捕获标志STATE_START | STATE_IS_DOCUMENT 在重定向之前导致严重的 UI 挂起。我也把请求取消方法调用。现在看起来像这样:
bookmarksResolver: {
onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) {
var nsIWebProgressListener = Components.interfaces.nsIWebProgressListener;
if (aStateFlags & nsIWebProgressListener.STATE_TRANSFERRING
&& aStateFlags & nsIWebProgressListener.STATE_IS_REQUEST) {
try {
var location = aWebProgress.DOMWindow.location.href;
var resolvedLocation = resolveReferences(location);
if (resolvedLocation != location) {
aRequest.cancel(Components.results.NS_BINDING_REDIRECTED);
aWebProgress.DOMWindow.location.href = resolvedLocation;
logger.info('Old URL: [' + location + ']');
logger.info('Redirected to: [' + resolvedLocation + ']');
}
}
catch(ex) {
//Logging error
}
}
},
/* Stubs for other listeners */
onLocationChange: function(a, b, c, d) {},
onProgressChange: function(a, b, c, d, e, f) {},
onStatusChange: function(a, b, c, d) {},
onSecurityChange: function(a, b, c) {},
QueryInterface: function (aIID) {
if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
aIID.equals(Components.interfaces.nsIWebProgressListener2) ||
aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
aIID.equals(Components.interfaces.nsISupports)) {
return this;
}
else {
throw Components.results.NS_NOINTERFACE;
}
}
},
除 RSS 页面外,一切正常。旧位置和“重定向到”的日志条目显示标记已被替换且新 URL 正确。但是它们会一遍又一遍地重新加载,因为实际的 URL(我从 aWebProgress.DOMWindow.location.href
获得)由于某种原因没有改变,并且一次又一次地执行替换。加载 RSS URL 有什么不同,如何解决?
最佳答案
Q1:我更喜欢onStateChange
Q2:也许 aRequest.cancel(Components.results.NS_BINDING_REDIRECTED)
会和平地结束原始请求。
关于firefox-addon - nsIWebProgressListener - 重定向到另一个 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13137929/
在我的扩展中,我需要处理部分 URL 被一些标记替换的书签。当用户打开这样的书签时,扩展应该用一些值替换这个标记并打开新的位置。为了实现这一点,我使用了 nsIWebProgressListener,
我正在用 C++ 开发 Firefox 扩展我想获取我已为 STATE_IS_NETWORK 获得 STATE_STOP 的选项卡窗口的选项卡索引。即我想找到与请求关联的选项卡索引。 如何获取? 请帮
你好,我是 ajax 的新手,我将它与 jquery 一起用于在另一个 html 文档中的 html div 中加载 html 文档,我实现此目的的方式是这样的: function pageloa
我正在使用 VS2008 为 Firefox 3.0-3.5 版本开发扩展。 一旦文档加载请求在该选项卡窗口中完成,我想将属性设置为该选项卡。 所以在 OnStateChange 方法中,我正在检查文
我是一名优秀的程序员,十分优秀!