为什么“ window.location.href”在此用户脚本中返回“ about:blank”?

时间:2019-06-24 04:16:07

标签: javascript redirect userscripts location-href greasemonkey-4

这个非常简单的用户脚本使我受益匪浅:

// ==UserScript==
// @name        TEMP
// @match       https://*.facebook.com/
// @match       https://*.facebook.com/?*
// @grant       none
// @run-at document-start
// ==/UserScript==

alert(window.location.href);

在使用Facebook主页加载新标签时,它会正确打印当前URL。但是,如果我已经在现有的Facebook页面上,然后单击左上方的Facebook徽标转到主页,则在短时间内将错误地打印伪URL about:blank

为什么会发生,更重要的是,如何解决?

这是在Firefox 67和GreaseMonkey 4.9上。
(请参阅编辑历史以获取更长的演示。)

更新

  1. alert(document.URL)还会打印“ about:blank”。

  2. document.addEventListener("DOMContentLoaded", function(){alert(window.location.href)})不打印任何内容。

  3. window.addEventListener("load", function(){alert(window.location.href)})打印的网址很长,与地址栏中的网址不匹配;格式为:

    https://www.facebook.com/?ref=logo&fb_dtsg_ag=AAAAAAAAAAAAAAAAAAAAAAAAAAAA__BBBBBBBBBBBBBB_CC%3DDDDDDDDDDDDDD--MeetvEEEEEEEEEEEEE_FFFFFFFFFFHw&ajaxpipe=1&ajaxpipe_token=GGGGGGGGGGGGGGGG&no_script_path=1&quickling[version]=<very long string indeed...>&__spin_t=9999999999&__adt=2
    
  4. document.baseURI可行! (为什么?)- ,但这不是理想的解决方案,因为在宏伟方案中实际上,我实际上想访问window.location对象的其他属性(准确地说是pathsearch)。我可以以此来构造一个new URL(),但是老实说,我宁愿避免这样做,如果可能的话(也希望在整个脚本中保持一致)。 < strong>更新:也仅适用于瞬间。

0 个答案:

没有答案