这个非常简单的用户脚本使我受益匪浅:
// ==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上。
(请参阅编辑历史以获取更长的演示。)
更新:
alert(document.URL)
还会打印“ about:blank”。
document.addEventListener("DOMContentLoaded", function(){alert(window.location.href)})
不打印任何内容。
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
document.baseURI
可行! (为什么?)- ,但这不是理想的解决方案,因为在宏伟方案中实际上,我实际上想访问 < strong>更新:也仅适用于瞬间。window.location
对象的其他属性(准确地说是path
和search
)。我可以以此来构造一个new URL()
,但是老实说,我宁愿避免这样做,如果可能的话(也希望在整个脚本中保持一致)。