JavaScript强制以编程方式关闭标签?

时间:2018-04-09 00:55:05

标签: javascript google-chrome screen-scraping

我遇到了一些网站无法以编程方式关闭的问题:

window.close()

失败了:

web/Stores.war/RAPIDStorefrontAssetStore/AJAXUserInterface/javascript/FDBrowse.js:301 Uncaught TypeError: Cannot read property 'style' of null
at close (web/Stores.war/RAPIDStorefrontAssetStore/AJAXUserInterface/javascript/FDBrowse.js:301)
at <anonymous>:1:8

违规网站是:https://www.1800flowers.com/about-us-employment-opportunities?utm_medium=direct&utm_source=1800flowerscom 虽然这确实发生在其他人身上。

我该如何强行关闭?什么在关闭方法中运行失败?一些调查显示该文档未能在网站尝试运行的脚本中找到某些文档元素但是如何在关闭之前阻止它运行任何内容?我试图将on_X方法设置为null,但没有成功......

2 个答案:

答案 0 :(得分:2)

您遇到的问题是该网站已覆盖默认的window.close方法以及其他一些功能。

要解决此问题,您应该能够从母版页中的window.open()返回的Window对象中调用原始的Window.close方法。

var popup = window.open('...');
popup.close(); // should be the original Window.close method

但是,如果由于某种原因,您绝对想要从目标网页中关闭此方法,那么您可以从iframe {{{{{{}检索原始Window.close方法1}},并在您的页面上调用此方法。

&#13;
&#13;
contentWindow
&#13;
&#13;
&#13;

以上 a live plnkr 可以更好地演示上述代码。

答案 1 :(得分:1)

以下语句creates a new window使用window.open(),将window.close()重新绑定到original window,然后重新closes

(window.close = (w => w.close() || w.close)(window.open()))()

<强> 解释

1800 Flowers已覆盖全局window.close以关闭arbitrary element

在浏览器中运行console.log(window.close)时很明显。

console.log(window.close) // ƒ close(){document.getElementById("overlay").style.display="none"}

您引用的error归因于override的{​​{1}}和window.close()的缺席。

因此:document.getElementById('overlay')

因此:要以编程方式关闭"Cannot read property 'style' of null"1800 Flowers必须反弹(没有找到替代方法)。