これについて多くの質問が寄せられていることは承知していますが、実際にはどの解決策もうまくいかないようです。これが状況です。既存のサイトに追加する必要がある Web ページがあります。このサイトは、私が触れることができないマスター ページを使用しています。body タグにアクセスできないため、これにより javascripts window.onload の使用が制限されます。
私のページでは、他のすべての外部ファイルの下のヘッドに外部 .js ファイルをリンクしました。これは、私の .js ファイルがどのように見えるかの例です。
var myobj = null;
(5 or so functions that work properly. Mainly just toggles that show and hide divs. none touch the onload)
function load(){
myobj = document.getElementById("my_element");
alert("test");
}
window.onload = load;
これを試してみましたが、アラートが表示されないため、ロード機能は起動しません。ロード機能の最初の行をコメントアウトしようとしましたが、アラートだけではなく、まだ何もありません。周りを見回すと、成功しなかった別の方法も見つかりました。window.load を削除してこれを追加したことを除いて、他のすべては同じです。
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function () {
if (oldonload) {
oldonload();
}
func();
}
}
}
addLoadEvent(load);
addLoadEvent(function () {
/* more code to run on page load */
alert("hello2");
});
この関数では、どちらのアラートも発生しません。また、関数の外にアラートを配置しようとしましたが、そのアラートは機能します。
私が使用しているブラウザは、IE 8.0.7600.16385 と Chrome 21.0.1180.60 です。
さらに情報が必要な場合はお知らせください。
ああ、補足として、jquery やその他の JavaScript ライブラリを使用することはできません。また、このページは IE8 で動作する必要があります。IE8 は、現在ビジネスでのみサポートされているブラウザです。Chromeでも動作するならいいですね。
編集 これを完全に間違った方法で行っている場合、私がやろうとしているのは、私が持っている最後の要素を追跡することです。私は本質的に 2 列のページを持っています。左側はメニューで、右側はコンテンツです。コンテンツはすべて div に配置され、一度に 1 つのカテゴリのみが表示されます。メニュー カテゴリをクリックすると、以前のコンテンツが非表示になり、新しいコンテンツが表示されます。
コンテンツ クラスを display: none; に設定しました。start_content ID を display: block; に設定します。Javascript がすべきことは、私のグローバルを start_content オブジェクトで初期化することです。メニューをクリックすると、obj.style.display = 'none' を実行する関数が呼び出され、新しい obj が display = 'block' に設定されます。次に、新しい obj を受け取り、それをグローバル変数に配置して、次のメニュー クリックで変更されるようにします。
onload 関数を使用しない例を次に示します。
var prevContent = document.getElementById("start_content");
function toggle(id) {
prevContent.style.display = "none";
var content = document.getElementById(id);
content.style.display = "block";
prevContent = content;
}
これに関する問題は、トグル関数に入ったときに prevContent が識別されないことです。これは、この .js ファイルをヘッドにリンクしているためであると想定していたため、ページはまだ start_content をロードしていません。そのため、グローバルを null として宣言し、window.onload を設定するように変更しました。作成後に適切な値を設定します。