17

私は単に GreaseMonkey のユーザー スクリプトをいじっているだけです。

function test() {
document.getElementById('elementhere').innerHTML = 'test';
}
document.onload = test();

使用したいページに移動して「実行」または「リロードして実行」すると機能しますが、自動的には実行されません。これは、document.onload を使用して実行しようとしています。

4

8 に答える 8

25

必要なものは次のとおりです。

window.onload = function () {
// do the work after everything was loaded (DOM, media elements)
}

document.onload存在しません。たとえば、ドキュメントの特定の要素を少なくともターゲットにすると機能します。

document.querySelector("img").onload = function ()
 {// do your thing after 'img' was loaded}

次のように、メディア要素が読み込まれるのを待たずに、DOM が唯一の要素の準備ができた後に何らかのコードを実行する場合は、他のオプションがあります。

  • コードを含むファイルをロードする async スクリプト タグをインポートします。このタグは、DOM 内の任意の場所に配置できます。何も中断されず、DOM のロードが完了した後にロードされます。それについては、MDN のドキュメントを参照してください。

  • MDN のドキュメントをもう一度見てみると、addEventListener で処理できる DOMContentLoaded および DOMFrameContentLoaded イベントを使用するように注意事項のセクションで推奨されています。したがって、これを行う場合:

document.addEventListener('DOMContentLoaded', handlerFunc);

あなたのために働きます。

これがお役に立てば幸いです...

于 2017-07-10T19:33:58.817 に答える
13

を記述すると、関数document.onload = test()呼び出され、その戻り値がハンドラに割り当てられます。これは明らかに意図したものではありません。testonload

document.onload = test;

これにより、関数への参照がハンドラーに割り当てられます。イベントが発生すると、関数が呼び出されます。testonload

于 2013-09-23T13:47:46.183 に答える
3

たぶんこれを行う:

<body onload="test()">

それとも、それはあなたが探しているものではありませんか? 上記の HTML ビットなしで実行したい場合は、ドキュメントをウィンドウに置き換えてみてください:

window.onload = function ()
{
   document.getElementById('elementhere').innerHTML = 'test';
} 

このため、私はそれを試してみます:

window.onload と document.onload の比較

リンクへのリンクを投稿するのが下手なのはわかっていますが、なぜ私がそうしたのかわかるでしょう (うまくいけば)。

乾杯!

于 2013-09-23T13:53:45.747 に答える
0

動作していますが、代替を使用できます

window.init = test;
于 2013-09-23T13:49:22.230 に答える
0

DOMContentLoadedGreasemonkey を使用している場合、Greasemoneky スクリプトはが起動されたときにのみ呼び出されるため、using onload イベントは実際には必要ありません。

Greasemonkey ユーザー スクリプトのコードは、DOMContentLoaded イベントが発生したときに呼び出されます (GM 0.8.6 以降のイベント キャプチャ中)。これは、 window.onload に似た、Mozilla によって実装された DOM イベントです。 ただし、ページ全体 (画像、スタイル シートなどを含む) ではなく、DOM の読み込みのみを待機するため、より早く実行されます。

http://wiki.greasespot.net/DOMContentLoaded

test()イベントリスナーなしで呼び出すだけでよいと思います。

于 2013-09-23T13:57:08.250 に答える
-1

これを試しましたか?

<body onload="test()">

また

    $(document).ready(function test() {
    document.getElementById('elementhere').innerHTML = 'test';
    }
于 2013-09-23T13:51:51.887 に答える