1

現在、次のグリースモンキースクリプトがあります。

// ==UserScript==
// @name        test_script
// @namespace   my.example.com
// @include     http://example.com/*
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// @version     1
// @grant       none
// ==/UserScript==

(function(window, undefined) {

        // normalized window
        var w;
        if (unsafeWindow != "undefined"){
                w = unsafeWindow
        } else {
                w = window;
        }

        // You can inject almost any javascript library here.
        // Just pass the w as the window reference,
        // e.g. jquery.min.js embedding:
        // (function(a,b){function ci(a) ... a.jQuery=a.$=d})(w);

        // do not run in frames
        if (w.self != w.top){
                return;
        }
        // additional url check.
        // Google Chrome do not treat @match as intended sometimes.
        if (/http:\/\/example.com\//.test(w.location.href)){
                var link = $('span.link').text();
                if (link) {
                    location.replace(link);
                }
        }
})(window);

ページを開くexample.comと、ここで URL が検索され、リダイレクトされます。うまく機能しますが、リダイレクトはすべての画像、スタイル シートなどが読み込まれたときにのみ発生します。どうすれば修正できますか?それは前に起こるべきであるように見えます。

4

1 に答える 1

2

表示したコードは、画像が読み込まれる前に起動しますが、CSSの前に起動する必要はありません。MozillaのDOMContentLoadedドキュメント
から(そしてGecko、Webkit、IEで検証済み):

スタイルシートはブロックスクリプトの実行をロードするため、<script>後がある場合、スタイルシートがロードされるまで<link rel="stylesheet" ...>、ページは解析を終了せず、DOMContentLoadedは起動しません。

明らかに、CSSや画像が小さいかキャッシュされている場合は、スクリプトが起動する前に読み込まれるように見えることもあります。

を使用してこれを回避できる場合があります@run-at document-start。たとえば、この回答などを参照してください。

于 2012-10-27T21:13:35.230 に答える