28

ページ上の既存の JavaScript 関数を呼び出したい非常に単純なグリースモンキー スクリプトがあります。ドキュメントを読みましたが、何も機能していないようです

window.setTimeout(function() { 
    alert('test') // This alert works, but nothing after it does
    myFunction() // undefined
    window.myFunction() // undefined
    document.myFunction() // undefined
}, 1000);
4

3 に答える 3

27

使用してみてください: unsafeWindow.myFunction();

詳細と情報 - http://wiki.greasespot.net/UnsafeWindow

于 2009-01-14T15:56:24.303 に答える
17

元のページで関数を呼び出す 1 つの方法は次のとおりです。

location.href = "javascript:void(myFunction());";

少し醜いです。GreaseMonkeyが提供する unsafeWindow もありますが、作成者は使用しないようにアドバイスしています。

unsafeWindow.myFunction();

きれいに見えますが、影響を理解していることを確認してください。マニュアルから:

unsafeWindow は、Greasemonkey の XPCNativeWrapper ベースのセキュリティ モデルをバイパスします。これは、悪意のある Web ページが、グリースモンキー スクリプト (Web ページで実行される通常の Javascript よりも高い権限で実行される) に作成者が行うことを行わせるような方法でオブジェクトを変更できないようにするために存在します。またはユーザーが意図していませんでした。したがって、ユーザー スクリプトは、unsafeWindow のプロパティに応じて、またはその他の方法で呼び出しを行うことを避ける必要があります。特に、ページの作成者がこの方法で環境を破壊した可能性がある @include * を含むページなど、任意の Web ページに対してスクリプトが実行される場合は特にそうです。

つまり、unsafeWindow を使用すると、スクリプトは元のページ スクリプトが使用できる権限を昇格させます。

于 2009-01-14T15:57:00.950 に答える
7

javascriptイベントリスナーを使用してみることができます。

これらは、発生するオブジェクトイベント(ページの読み込みなど)に応答してコードを実行します

たとえば、ページの読み込み時にコードを実行するには、次のようにします。

window.addEventListener('load', function () 
{
    /* code goes here */
});
于 2009-02-03T01:21:24.877 に答える