很多人都可能遇到過這種情況:設定 innerhtml 的時候,插入的 html **中包含指令碼,但這些指令碼卻不生效,或者在 ie 上生效在其它瀏覽器上就不生效。原因很簡單:不同瀏覽器對插入 innerhtml 中的指令碼有不同的處理方法。經過實踐,歸納如下:
對於ie,首先 script 標籤必須帶 defer 屬性,其次在插入時刻,innerhtml 的所屬節點必須在 dom 樹中;對於 firefox 和 opera,在插入時刻,innerhtml 的所屬節點不可以在 dom 樹中。
根據上面結論,給出通用的設定 innerhtml 方法:
/*
* 描述:跨瀏覽器的設定 innerhtml 方法
* 允許插入的 html **中包含 script 和 style
ken@ajaxwing.com
>
* 日期:2006-06-26
* 引數:
* el: 合法的 dom 樹中的節點
* htmlcode: 合法的 html **
* 經測試的瀏覽器:ie5+, firefox1.5+, opera8.5+
*/window
.__el_stack=
;var
setinnerhtml
= function(el
, htmlcode
)elseel.
innerhtml
= htmlcode
; if(
el_next
)else}if
(ua
.indexof('
gecko')
< 0)
}document
.write
= function
()else
for(
vari= 0
; i
<
arguments
.length; i
++)}}
在這篇文章編寫之前,已經有乙個比較完善的解決方法《讓插入到 innerhtml 中的 script 跑起來》。比較起來,《讓》給出的方法考慮得更細緻,但處理起來比較繁瑣,效率不高。而這裡給出的方法則更簡單,並且充分利用了瀏覽器的特性。
瀏覽器設定跨域
由於專案前端使用8001埠,後端使用的8080埠,因此前端呼叫後端介面時需要跨域,在瀏覽器中需要設定跨域,否則會由於跨域安全性導致請求失敗。比如chrome中,需要新建乙個chrome瀏覽器的快捷方式,右鍵選擇屬性 新增 disable web security user data dir c ch...
谷歌瀏覽器跨域設定
一 49版本以前的設定 在桌面chrome快捷方式的屬性中的目標輸入框新增 disable web security 新增部分與前面字元之間有空格 二 49版本以後的設定 1.在電腦上新建乙個目錄,例如 c mychromedevuserdata 2.在屬性頁面中的目標輸入框裡加上 disable ...
chrome 瀏覽器跨域設定
關閉所有的chrome瀏覽器視窗 新建乙個chrome快捷方式,右鍵 屬性 快捷方式 選項卡裡選擇 目標 在之前的內容後空格增加以下內容 49版本以前 新增 args disable web security 49版本之後 先建立乙個臨時遊客資料夾,c users chrome mychromede...