[英]Script tag injection with synchronous execution
我必須通過一些JavaScript添加腳本標簽,並使其完全執行,因為后面的語句依賴它。
<html> <head> <title>Injecting Script Tags</title> </head> <body> <h1>Injecting Script Tags</h1> <script> console.log('starting'); var newScriptTag = document.createElement('script'); newScriptTag.src = 'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js'; newScriptTag.type = 'text/javascript'; document.head.appendChild(newScriptTag); try { var now = moment().format('HH:mm'); console.log(`moment loaded. The time is ${now}`); } catch (e) { console.log(`Moment not loaded: ${e}`); } </script> </body> </html>
如上面的代碼片段所示,插入標簽后, moment()
在語句中不可用。
我認為可以用eval(...)
,但是該選項並不受歡迎。
使用onload事件
<html> <head> <title>Injecting Script Tags</title> </head> <body> <h1>Injecting Script Tags</h1> <script> console.log('starting'); var newScriptTag = document.createElement('script'); newScriptTag.src = 'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js'; newScriptTag.type = 'text/javascript'; newScriptTag.onload = function(){ try { var now = moment().format('HH:mm'); console.log(`moment loaded. The time is ${now}`); } catch (e) { console.log(`Moment not loaded: ${e}`); } }; document.head.appendChild(newScriptTag); </script> </body> </html>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.