2013-03-07 92 views
1

我這樣做,但它不工作:如何通過window.location更改URL後運行代碼?

window.addEventListener("load", function load(event){ 
    alert('hola'); 
},false); 

window.location.assign("about:blank"); 

這是一個Greasemonkey的腳本。新位置已加載,但警報從不顯示。

+0

從未發生警報。一旦位置發生變化,用戶就不再在您的網站上... – BenM 2013-03-07 16:15:25

+1

由於這是一個Greasemonkey腳本,爲什麼不啓用它(或創建一個不同的)來處理新的位置URL呢? – 2013-03-07 16:58:17

+0

[Javascript:當窗口完全加載時檢測到]的可能重複(http://stackoverflow.com/questions/6424064/javascript-detect-when-a-window-is-fully-loaded) – 2013-06-14 10:25:44

回答

1

通過僅更改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的瀏覽器等效。爲了利用這一點,您需要使用該庫的約定來註冊事件。

+0

如果我做了你說,它沒有工作。看: – gal007 2013-03-07 16:40:55

+0

window.addEventListener(「hashchange」,函數加載(事件){ alert('hola'); },false); window.location.replace(「http://www.yahoo.com」); – gal007 2013-03-07 16:41:03

+0

警報從不顯示 – gal007 2013-03-07 16:41:20

4

更改window.location後,將清除Greasemonkey腳本的當前實例。要在位置更改後「運行代碼」,您需要將腳本設置爲在新頁面上觸發(在這種情況下爲about:blank),然後使用標誌通過重定向原始頁面的腳本表示已到達新頁面。

  1. 確保腳本的@include@match指令在新頁面上觸發。
  2. 使用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"); 
} 
+0

它不工作當位置被加載時document.onLoad不叫 – gal007 2013-03-08 16:15:34

+1

不,它完美的工作(1)'document.onLoad'不是一個有效的函數,(2)我的答案不使用onload函數**你有沒有嘗試我的腳本?它的工作原理**(你只需要改變一個include,(3)這個問題不需要onload(「更改URL後運行代碼」),(4)窗口加載事件會觸發,但不是必需的。 – 2013-03-08 23:12:39