我這樣做,但它不工作:如何通過window.location更改URL後運行代碼?
window.addEventListener("load", function load(event){
alert('hola');
},false);
window.location.assign("about:blank");
這是一個Greasemonkey的腳本。新位置已加載,但警報從不顯示。
我這樣做,但它不工作:如何通過window.location更改URL後運行代碼?
window.addEventListener("load", function load(event){
alert('hola');
},false);
window.location.assign("about:blank");
這是一個Greasemonkey的腳本。新位置已加載,但警報從不顯示。
通過僅更改URL的哈希(或片段)的一部分,然後做什麼是你想做的事,這樣的:
window.location.assign("#hello")
alert("hola")
或這樣的:
window.location.hash = "world"
alert("mondo")
如果文檔已經加載,onload
將不會再次觸發,因此您無法從load
事件中運行它。 HTML5,提供了一個hashchange
的事件,你可以使用,因此:
window.addEventListener("hashchange", function (event){
alert('change');
},false);
一些JavaScript庫(我知道道場一樣)實施hashchange
或用於非HTML5的瀏覽器等效。爲了利用這一點,您需要使用該庫的約定來註冊事件。
更改window.location
後,將清除Greasemonkey腳本的當前實例。要在位置更改後「運行代碼」,您需要將腳本設置爲在新頁面上觸發(在這種情況下爲about:blank
),然後使用標誌通過重定向原始頁面的腳本表示已到達新頁面。
@include
或@match
指令在新頁面上觸發。GM_setValue()
來設置標誌讓腳本知道它已被故意轉世。這是一個完整的,工作腳本,說明了過程:當然
// ==UserScript==
// @name _Fire after redirect to about:blank
// @include about:blank
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_deleteValue
// ==/UserScript==
//-- Are we on a blank page after a redirect by this script?
var bAfterRedirect = GM_getValue ("YouHaveBeenRedirected", false);
//-- Always erase the stored flag.
GM_deleteValue ("YouHaveBeenRedirected");
if (bAfterRedirect && location == 'about:blank') {
//-- DO WHATEVER YOU WANT WITH THE BLANK/NEW PAGE HERE.
$("body").append (
'<h1>This content was added after a GM redirect.</h1>'
);
}
else if (location != 'about:blank') {
/*-- If we are on the original target page, signal our next incarnation
that it was triggered by a redirect. Then redirect to about:blank.
*/
GM_setValue ("YouHaveBeenRedirected", true);
location.assign ("about:blank");
}
它不工作當位置被加載時document.onLoad不叫 – gal007 2013-03-08 16:15:34
不,它完美的工作(1)'document.onLoad'不是一個有效的函數,(2)我的答案不使用onload函數**你有沒有嘗試我的腳本?它的工作原理**(你只需要改變一個include,(3)這個問題不需要onload(「更改URL後運行代碼」),(4)窗口加載事件會觸發,但不是必需的。 – 2013-03-08 23:12:39
從未發生警報。一旦位置發生變化,用戶就不再在您的網站上... – BenM 2013-03-07 16:15:25
由於這是一個Greasemonkey腳本,爲什麼不啓用它(或創建一個不同的)來處理新的位置URL呢? – 2013-03-07 16:58:17
[Javascript:當窗口完全加載時檢測到]的可能重複(http://stackoverflow.com/questions/6424064/javascript-detect-when-a-window-is-fully-loaded) – 2013-06-14 10:25:44