1

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

// ==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 徽标转到主页,它会在短时间内错误地打印 pseudo-URL about:blank

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

这是在 Firefox 67 和 GreaseMonkey 4.9 上。
(查看编辑历史以获得更长的演示。)

更新:

  1. alert(document.URL)还打印“关于:空白”。

  2. document.addEventListener("DOMContentLoaded", function(){alert(window.location.href)})什么都不打印。

  3. window.addEventListener("load", function(){alert(window.location.href)})打印一个与地址栏中的不匹配的很长的 URL;它在表格上:

    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对象的其他属性(path并且search,准确地说)。我可以new URL()用这个来构建 a,但老实说,如果可能的话,我宁愿避免这样做(也希望在整个脚本中保持一致)。 更新:也只适用于瞬间。

4

0 回答 0