0

私はjavascriptファイルをwordPress管理者に正しく挿入しました:

 wp_enqueue_script()

スクリプトが読み込まれていることはわかっています。でテストしましたalert()。その後、DOMにアクセスできないことがわかりました。私が試したとき:

document.getElementsByTagName('body')[0].addEventListener('load', function() {});

このエラーは次のとおりです。

Uncaught TypeError: Cannot call method 'addEventListener' of undefined

「settingsapi」を使用したり、WordPress管理者にスクリプトを挿入したりするのはこれが初めてです。

4

4 に答える 4

1

実際には、ロード イベント ハンドラを ではwindowなくに追加する必要がありbodyます。1 つには、BODY タグが解析されるまで本文は存在しません。スクリプトが HEAD にある場合、本文に何かを追加するには時期尚早です。そのため、DOM が読み込まれるまでスクリプトを実行しないようにする場合、DOM 内のオブジェクトにイベント ハンドラーを追加しようとしても実現できません。

これを処理するには、JS フレームワークを使用することを強くお勧めします。ページの読み込み時に実行する独自の関数を追加することは、ブラウザー間の互換性と容易な拡張性を実現したいものです。主要な JS フレームワークはすでにこの問題を解決しており、手動で実行しようとしてもほとんど得られません。

于 2012-09-23T21:34:17.643 に答える
1

コードは、DOM が完全にロードされて<body>利用できない前に実行されている可能性があります。ロード時に関数を実行したい場合はjQuery.ready()、デフォルトでWordpressでjQueryがすでに利用可能であるため、次のように使用します。

jQuery(document).ready(function($){ /* your code */ });

http://api.jquery.com/ready/

于 2012-09-23T21:31:04.540 に答える
1

私はあなたがこれを試すことができると思います

document.addEventListener('DOMContentLoaded', load, false);

また

window.onload=load; // onload will work in all browsers so use this

そしてあなたのハンドラー

function load(){ ... }

Fabrício Mattéのアプローチに従うこともできます。

于 2012-09-23T21:44:47.647 に答える
0

ページの でスクリプトをキューに入れfooterます。

DOM 対応ハンドラーは必要ありません。ましてや、ロード リスナーは必要ありません。
また、@Dancrumbが答えたように、loadwindowイベントであり、のではありませんbody

デフォルトでは、WP はスクリプトをhead. DOM パーサーがまだタグに到達していないため、リスナー/遅延実行なしでbody要素に直接アクセスすることはできません。スクリプトをフッターに配置することで、スクリプトを実行するための DOM の準備がすでに整っていることが保証されます。headbody

の構文wp_enqueue_script()は次のとおりです。

wp_enqueue_script( 
     $handle
    ,$src
    ,$deps
    ,$ver
    ,$in_footer 
);

したがって、ユースケースでは、5 番目のオプションを に設定しますtrue

于 2012-09-23T21:43:52.063 に答える