gpt4 book ai didi

javascript - ProgressListener如何过滤掉异步请求?

转载 作者:行者123 更新时间:2023-11-29 20:25:20 24 4
gpt4 key购买 nike

我正在使用 progresslistener 来监视网页上的用户操作,当用户单击链接时,我正在尝试检查此请求是否会将用户重定向到新位置,或者它只是一个 Ajax WebHttpRequest(它不会重新加载或重定向页面)。这是我正在使用的代码:

ProgressListener.prototype = {
QueryInterface: function(aIID)
{
if (aIID.equals(Components.interfaces.nsIWebProgressListener) ||
aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
aIID.equals(Components.interfaces.nsISupports) ) {
return this;
}
throw Components.results.NS_NOINTERFACE;
},

onStateChange: function(aWebProgress, aRequest, aFlag, aStatus) {
if (!aRequest) return 0;
if (aFlag & STATE_IS_NETWORK) {
if (aFlag & STATE_START &&
aFlag & STATE_IS_REQUEST &&
aFlag & STATE_IS_DOCUMENT) {

OnLoadInitiated(aWebProgress, aRequest, this.mBrowser);

} else if (aFlag & STATE_STOP &&
aFlag & STATE_IS_WINDOW &&
aStatus == 0) {
OnLoadComplete(aWebProgress, aRequest, this.mBrowser);
}
}
return 0;
},

onLocationChange: function(aProgress, aRequest, aURI)
{
OnLocationChange(aProgress, aRequest, aURI, this.mBrowser);
return 0;
},

onProgressChange: function(aWebProgress, aRequest, curSelf, maxSelf, curTot, maxTot) { return 0;},
onStatusChange: function(aWebProgress, aRequest, aStatus, aMessage) { return 0;},
onSecurityChange: function(aWebProgress, aRequest, aState) { return 0;}
}

function ProgressListener(aBrowser) {
this.mBrowser = aBrowser;
}

function OnTabOpen(event) {
var doc = event.target.linkedBrowser.contentDocument;
var win = doc.defaultView;

var gsToolbar = new GSToolbar();
gsToolbar.LoadCount = 0;
gsToolbar.JustOpenedTab = true;

var browser = event.target.linkedBrowser;
browser.GSToolbar = gsToolbar;

var pListener = new ProgressListener(browser);
browser.ProgressListener = pListener;

browser.addProgressListener(pListener, NOTIFY_STATE_DOCUMENT);
}

function OnTabMove(event) {
var browser = event.target.linkedBrowser;
}

function OnTabClose(event) {
var browser = event.target.linkedBrowser;

browser.removeProgressListener(browser.ProgressListener);
}

function OnTabSelect(event) {
var browser = event.target.linkedBrowser;

var gsToolbar = gBrowser.getBrowserForDocument(gBrowser.selectedBrowser.contentDocument).GSToolbar;

}

function InitialWindow() {
var num = gBrowser.browsers.length;

if (num == 1) {
var gsToolbar = new GSToolbar();
gsToolbar.LoadCount = 0;
gsToolbar.JustOpenedTab = true;

var browser = gBrowser.getBrowserAtIndex(0);
browser.GSToolbar = gsToolbar;

var pListener = new ProgressListener(browser);
browser.ProgressListener = pListener;

browser.addProgressListener(pListener, NOTIFY_STATE_DOCUMENT);
}

var container = gBrowser.tabContainer;
container.addEventListener("TabOpen", OnTabOpen, false);
container.addEventListener("TabMove", OnTabMove, false);
container.addEventListener("TabClose", OnTabClose, false);
container.addEventListener("TabSelect", OnTabSelect, true);
}

function UnloadWindow() {

var num = gBrowser.browsers.length;

if (num == 1) {
var browser = gBrowser.getBrowserAtIndex(0);
browser.removeProgressListener(browser.GSProgressListener);
}

var container = gBrowser.tabContainer;
container.removeEventListener("TabOpen", OnTabOpen, false);
container.removeEventListener("TabMove", OnTabMove, false);
container.removeEventListener("TabClose", OnTabClose, false);
container.removeEventListener("TabSelect", OnTabSelect, false);

}

window.addEventListener("load", function(e){ InitialWindow();}, false);
window.addEventListener("unload", function(e){ UnloadWindow();}, false);

有没有我应该检查 onStateChange 和 onLocationChange 的标志?谢谢。

我确实阅读了文档,但我试图将条件缩小到 aFlag & STATE_START && aFlag & STATE_IS_REQUEST && aFlag & STATE_IS_DOCUMENT && aFlag & STATE_IS_WINDOW

但仍然无法过滤掉异步请求。我的目标是确保我的工具栏只处理同步请求(这会导致整个页面重新加载或重定向)并绕过任何异步调用,如 Ajax 请求。

似乎我必须向 onStateChange 和 onLocationChange 事件添加一些条件,但我尝试了这些标志的可能组合,到目前为止它们都没有实现目标。

处理该问题的最佳方法是什么?

非常感谢您的帮助。

最佳答案

好的,我从其他地方得到了答案。

对比onLocationChange中的DOMwindow.top.location.href和aURI.spec,相同则为同步调用,否则为异步。

关于javascript - ProgressListener如何过滤掉异步请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1506788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com