簡體   English   中英

加載html導入時執行javascript的順序

[英]Order of javascript execution when loading html import

http://webcomponents.org/polyfills/html-imports/說:

在本機導入下,主文檔中的<script>標記會阻止導入的加載。

為什么然后這個:

<html>
<head>

  <script>
    console.log('index');
  </script>

  <script src="bower_components/webcomponentsjs/webcomponents-lite.js"></script>

  <link rel="import" href="some-elt.html">

</head>
<body>
</body>
</html>

和some-elt.html:

<html>
<head>
  <script>
    console.log('import');
  </script>
</head>
<html>

以chrome生成(本機導入):

import
index 

在fireforx(polyfill)中:

index
import

在加載導入時,似乎阻止了<script>標記。

在加載任何導入之前是否還有一些方法可以確保執行js?

我在這里用你提供的標記創建了一個快速筆。
它似乎在FF和chrome中為我生成相同且正確的輸出( index然后import )。

但同樣可能的是,您可能會在控制台中看到不同的內容。 罪魁禍首不是解析腳本元素的方式,而是控制台API。 這是一個非標准的功能和說明可能會為您返回不同的結果, 在這里

console.log不是標准化的,因此行為相當未定義,並且可以在開發人員工具的發布之間輕松更改

要回答您的問題,腳本標記設計是阻塞的,因此您在link rel="import"之前放置的任何腳本將在瀏覽器遇到導入標記之前執行。

這是另一支筆( http://codepen.io/vishwaabhinav/pen/bEYwaK )來證明這一點(也可在下面找到),我在這里創建並在導入文件和主文檔中將div添加到body中。 它也按預期工作,即索引節點在導入節點之前附加到主體。

 <html> <head> <script> var node = document.createElement('div'); node.innerHTML = 'Index'; document.body.appendChild(node); </script> <script src="https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/0.7.20/webcomponents-lite.js"></script> <link rel="import" href="http://codepen.io/vishwaabhinav/pen/XXzjZW.html"> </head> <body> </body> </html> 

對不起每個人,構建腳本似乎有點不對勁。 生成的html輸出如下:

<!DOCTYPE html><html><head>
  <!--<script src="https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/0.7.20/webcomponents-lite.js"></script>-->
  <link rel="import" href="some-elt.html">

</head>
<body>

<script src="index.js"></script></body></html>

https://github.com/PolymerElements/polymer-starter-kit/issues/669

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM