1

我正在这样做,但它不起作用:

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

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

这是一个 Greasemonkey 脚本。新位置已加载,但从未显示警报。

4

2 回答 2

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");
}
于 2013-03-08T07:51:29.083 回答
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 库(我知道 dojo 会)实现hashchange或等效于非 HTML5 浏览器。为了利用这一点,您需要使用该库的约定来注册事件。

于 2013-03-07T16:25:27.337 回答