iframeとwindow.onloadの詳しい使い方
プリアンブル
プロジェクトでは、ページの色を変更するメソッドを実行する前に、ページの読み込みが完了するのを待つ必要があるので、輸出は問題を解決するためにonloadを使用している、しかし、これは私が遭遇した問題を解決していない、私は私のプロジェクトのページがまだロードされていないことがわかったので、知って長い時間を投げた、それは、プロジェクトが操作する非常に古いiframeを使っているので、あなたはメソッドを実行する前にロードが終了するまで待機する必要があります。理由を分析した後、私は伝統的な、ネイティブのJSは、オンロードを使用する方法について説明します。
Web上ではごく一般的な方法
<script type="text/javascript">
window.onload=function(){
document.getElementById("bg").style.backgroundColor="#F00";
}
</script>
説明:window.onload は、画像を含むページ内のすべての要素が読み込まれるまで待機する必要があります。
別の書き方もあります
<body οnlοad="loadBody()">
<div ></div>
<script type="text/javascript">
console.log("load ...... body javascript ");
window.οnlοad=function(){
console.log("load ...... body window javascript ");
}
</script>
</body>
説明 ボディの読み込みが終了するのを待って、loadBody()メソッドが実行されます。これはwindowとdomの後に実行され、常に最後に実行されます。ここでのonload関数は、window.onloadをオーバーライドします。
上記で解決しなかったので、本当は使いたくなかったjQueryのメソッド、$(document).readyをネイティブJSで実装できないかと思い調べてみたところ
function ready(fn){
if(document.addEventListener){ //standard browser
document.addEventListener('DOMContentLoaded',function(){
//logout time to avoid repeated triggering
document.removeEventListener('DOMContentLoaded',arguments.callee,false);
fn(); //run the function
},false);
}else if(document.attachEvent){ //IE browser
document.attachEvent('onreadystatechange',function(){
if(document.readyState=='complete'){
document.detachEvent('onreadystatechange',arguments.callee);
fn(); // function runs
}
});
}
}
しかし、私のプロジェクトでは何も変わっていないことがわかり、やはりプロジェクトではうまくいかず、あせりました。ふと、プロジェクトで使用しているiframeが思い浮かんだので、検索してみました。
iframeとは何ですか?
HTMLのインラインフレーム要素(
The page of the iframe is separate from the parent page, so it means that it is a separate area, not affected by the parent's CSS or the global JavaScript.
Main advantages.
/{br
(1) Web editors (WYSIWYG Online HTML Editor), as they need to reset their own CSS to their own standard without being override by parent CSS.
(2) Sandbox isolation.
(3) Sub-windows that need to maintain separate focus and history management, such as complex web applications.
Disadvantages.
(1) Styles/scripts require additional chaining in, which will increase requests.
/(2) iframe is good in that it can display all the original web pages as they are, but if it is used in a web page, it will increase the request.
(2) iframe is good to be able to the original page all the original display down, but if used in the home page, is the most annoying search engine.
(3) iframe creation is 1-2 orders of magnitude slower than the creation of other DOM elements including scripts and css.
(4) iframe blocks the Onload event of the main page
Well, after saying so many pros and cons, still need to see the specific project to solve the project on the problem, then how to solve the onload?
// Determine if the frameObj is loaded when the page is loaded
window.onload = function(){
var frameObj= document.getElementById("frameID");
// If it is loaded then execute the method
if (frameObj.attachEvent){// IE
frameObj.attachEvent("onload", function(){
yourfunction();
});
}else {
// Non-IE
frameObj.onload = function(){
yourfunction();
};
}};
There are two important points in this code, the first is that it needs to use window.onload and you need to know the attachEvent method
After writing the code for so long, I still put IE into consideration, after all, it's Windws kernel, so I don't want to delete it and hide it. Recently, when I was writing the front-end code, I found that if the project didn't originally use jQuery, I have been not using jQuery, the code is neater, and with the new vue, react have their own good packaging ideas, so I wrote the habit The $dollar character can finally be used without it.
Summarize
I used to be very lazy to write front-end code, write tags, write JS, and feel tedious and meaningless, probably because the school is learning Java, C/C++, this kind of logic is very strong, so in the front-end learning, it is a lot slower, do not know how many beats slower. When I want to write a front-end and back-end are very elegant, very gorgeous code, I found that only the back-end is not enough, the code written either very ugly, or the front and back interaction is very scribbled, so it can not be held. Recently wrote a code, still in the embellishment, and the application for the domain name can be considered through, here is a big hole, that is, a long time ago I had a record in the country, because it is still a student, the school location to apply for the record number, the results now want to change and feel the trouble, so always fill in the wrong, today I was informed that the audit passed, the next step is the network filing, I heard that is another step! The next step is the network filing, I heard it is another step, slowly go through the process!
This article about how to use iframe and window.onload is all about this. For more information about iframe and window.onload, please search the previous articles of Script House or continue to browse the following related articles.
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Html5 データストリームによる動画再生
-
HTML+Css+transformを使った3Dナビゲーションバーのサンプルコード
-
amazeuiのツリーノード自動展開パネルの実装と、最初のツリーノードの選択
-
AmazeUIがモーダルボックスにフォームを埋め込んでモーダルインプットボックスを形成する
-
html5 on outbound embedded page 通信問題 (postMessage でクロスドメイン通信を解決)
-
recorder.js Html5ベースの録画機能実装
-
ホームページのダイナミックな動画背景を実現するHTML5サンプルコード
-
カスタムお絵かきボード用JavaScript+Canvasサンプルコード
-
iphoneXの前髪スクリーンに合わせたHtml5の簡易実装
-
Canvas がクロスドメイン画像を導入し、toDataURL() エラーが発生する。