1. 程式人生 > 其它 >用JavaScript動態輸出的JS指令碼不能執行

用JavaScript動態輸出的JS指令碼不能執行

隨著Ajax的越來越多地運用,HTML的內容又開始由“所見即所得”開始向“所見未必所得”發展了。這就是動態改變網頁內容的魅力所在吧。 在公司產品動易2006版整合介面的開發過程中,需要在客戶端頁面上輸出一段呼叫遠端介面寫cookies的程式碼,最早的時候我是把呼叫url通過script的方式輸出。在ASP輸出HTML的時候,除錯通過。

動易2006的前臺登陸表單已經採用了Ajax技術,頁面上所看到的登陸表單並非直接由HTML程式碼在頁面中寫成,而是在頁面載入以後,通過JS,通過Ajax,向伺服器端的asp程式查詢使用者登入狀態以後,再動態輸出到頁面的。

一開始我通過JS,動態生成呼叫script的HTML程式碼以後,輸出到頁面,跟其它的HTML程式碼一樣。結果出現了通行登陸不能同步的問題。用alert除錯發現程式碼已經正確生成,顯然用innerHTML輸出到頁面以後,是沒有問題的。但是為什麼沒有登陸呢? 為這個問題,折磨了我一晚上。天亮的時候跟動網公司的迷城浪子聊到這個問題,老迷沒看我的指令碼,只是聽我講了一遍,回答我說“JS輸出的JS指令碼不能被執行的吧?”

難道真是這個問題?我把通過script呼叫改成通過img呼叫,還把圖片大小設定成100*100,果然在頁面上顯示了,同步登陸也成功了。

後來我寫了一個段測試指令碼,果然是js輸出的js將不能執行。具體看下面的程式碼:

  document.write("<script src="http://s33.cnzz.com/stat.php?id=109006&web_id=108995&show=pic" language="JavaScript" charset="gb2312"></script>");

在上面的例子中,可以看到頁面執行了遠端的js指令碼,輸出統計圖示

把程式碼修改如下:

  載入中...

    var newStr = "<script src="http://s33.cnzz.com/stat.php?id=109006&web_id=108995&show=pic" language="JavaScript" charset="gb2312"></script>";
    document.getElementById("div").innerHTML = newStr;

可以看到“載入中...”字樣已經被下面的JS程式碼動態輸出的程式碼替換了,但是並沒有顯示統計圖示,說明script指令碼呼叫程式碼已經被輸出到頁面,但是沒有被執行。