我知道这里有很多关于突变观察者的问题得到了解答。但我还没有找到解决方案。
在网站上,当我使用特定工具单击某些内容时,我会打开一个结果窗口。当我使用该工具单击另一个对象时,将打开一个新的结果窗口,但旧的窗口不会关闭。 所以我希望当新窗口出现时旧窗口关闭。 我可以手动执行此操作,因为它们有一个关闭按钮。所以我可以使用简单的点击功能来关闭它:
document.querySelector('[title="closeButton"]').click();
问题是,当新窗口出现时,我只想关闭旧窗口。我尝试使用突变观察器来查看结果窗口何时出现,但即使这样也不起作用。虽然我已经在另一个地方使用过这样的观察者没有问题。
function closeResultWindow() {
let observer = new MutationObserver(function (mutations) {
let found = mutations.find(mutation => Array.from(mutation.addedNodes)
.find(node => node.id ?
node.id.includes("lefttabs_tablist_module_") : false))
if (found) {
console.log("Resultwindow found")
document.querySelector('[title="closeButton"]').click();
}
});
observer.observe(document.body, {
childList: true, subtree: true
});
};
我用观察者尝试了不同的功能。但这是我已经在另一个问题上成功使用的功能,只是将其调整为这个问题。
lefttabs_tablist_module_
是结果窗口的 widgetid。每个窗口的 lefttabs_tablist_module_
后面都有另一个数字。
例如,窗口 1 具有
widgetid=lefttabs_tablist_module_1256
,下一个窗口 2 具有 widgetid=lefttabs_tablist_module_7549
。好像没有时间顺序。
上面的观察者只是一个测试,看看我是否可以识别至少一个结果窗口。但目标是观察何时打开新窗口,因此有两个窗口,并使用单击功能关闭旧窗口。
有人知道这怎么可能吗? 或者至少我的代码中用观察者识别一个窗口的问题是什么。
好的,我解决了。现在它的工作原理是这样的:
function closeResultWindow() {
let observer = new MutationObserver(function (mutations) {
let found = document.querySelectorAll('[widgetid^="lefttabs_tablist_module_"]');
if (found.length >= 2) {
console.log("Resultwindow found")
// find old result window
let closeButton = found[0].querySelector('[title="Close"]');
// close result window
if (closeButton) {
closeButton.click();
console.log("old result window closed");
}
}
});
observer.observe(document.body, { childList: true, subtree: true });
}
closeResultWindow();
现在,当我打开新窗口时,它会立即关闭旧窗口。 感谢您的帮助和解答!