国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

讓插入到 innerHTML 中的 script 跑起來的代碼第1/2頁

2024-05-06 14:18:47
字體:
供稿:網(wǎng)友
在做 ajax 編程時,我們常常需要將 xmlhttp 獲取到的頁面內(nèi)容通過 innerHTML 來賦給某個容器(比如 div、span 或者 td 等),但是這里存在一個問題,就是我們將要賦給 innerHTML 的頁面內(nèi)容如果包含有腳本程序,這些腳本程序不管是外部腳本,還是內(nèi)部腳本,可能(1)都不會被執(zhí)行。這個問題在某些時候微不足道,甚至可以忽略,但有些時候,這個問題就非常嚴重,它很可能讓我們的程序得不到預期的結(jié)果。因此我們需要解決這個問題。

如果你讀過 MSDN,你會發(fā)現(xiàn)并非所有插入到 innerHTML 中的腳本都不能執(zhí)行,如果這段腳本的 script 標簽中包含了 defer 屬性,IE 會正確的執(zhí)行這些腳本程序。但不幸的是,Moziila/Firefox 和 Opera 可不吃這一套,不管 script 標簽有沒有設(shè)置 defer 屬性,這些瀏覽器都不會向 IE 那樣去執(zhí)行插入到 innerHTML 中的腳本。

但不管腳本是否被執(zhí)行了,有一點我們可以肯定,那就是這些腳本確實被插入到了 innerHTML 中,如果不相信,你可以 alert 一下看看。但如果你真的 alert 了,你也可能會發(fā)現(xiàn)有一種例外情況存在,那就是如果腳本在 innerHTML 內(nèi)容開頭的話,那么 IE 瀏覽器將會忽略掉這段腳本,而 Moziila/Firefox 和 Opera 卻不會。

好了,問題分析的差不多了,我們來看看如何解決吧。

解決的思路其實很簡單,那就是將插入到 innerHTML 中的所有腳本取出來,然后一一執(zhí)行。不過我們先要解決上面的兩個問題。

先來看第一個問題,如何避免在 IE 中重復執(zhí)行 innerHTML 中帶有 defer 屬性的腳本。這個很容易,只需要先確定瀏覽器是否是 IE,然后再檢測將要執(zhí)行的腳本是否帶有 defer 屬性即可。需要注意的是,在判斷 IE 瀏覽器時,我們需要避免被 opera 的瀏覽器識別欺騙。這一點我們在后面的代碼中將會看到它是如何做的。

接下來,看 IE 忽略 innerHTML 開頭腳本的問題,這個也很容易解決。只需要在要插入到 innerHTML 中的內(nèi)容的開頭附加一段不是腳本的內(nèi)容,就可以了。但不要試圖附加一個空內(nèi)容的標簽,或者空格、回車、換行等,這將不起作用,開頭的腳本仍然會被忽略。也不要試圖附加  ,雖然這可以讓開頭的腳本不再被忽略,但這個   仍然會影響原有內(nèi)容的顯示,雖然你可能覺得不明顯,但是對于挑剔的用戶來說,這可能是無法容忍的。因此,為了讓附加的內(nèi)容既可以起到避免開頭腳本被忽略的功能,又不會造成不良影響,我們將附加這么一段內(nèi)容:
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 会昌县| 邹平县| 民勤县| 德保县| 鞍山市| 南岸区| 绵竹市| 西乌| 武城县| 理塘县| 兴义市| 黄冈市| 冷水江市| 仲巴县| 保山市| 蓬莱市| 永川市| 兰考县| 苏州市| 鸡泽县| 永修县| 淮安市| 集安市| 礼泉县| 海南省| 尼玛县| 新宁县| 宾阳县| 阿图什市| 江口县| 昭平县| 四平市| 应用必备| 彰武县| 朝阳市| 洪江市| 仁怀市| 德格县| 成武县| 虞城县| 广东省|