2011-08-15 86 views
5

我從jQuery 1.4.2升級到1.6.2,現在出現錯誤(在IE中)。我的JavaScript得到的jQuery globalEval()功能執行的頁面上升級到jQuery 1.6.2後,globalEval在嘗試執行JavaScript時拋出錯誤

// Evaluates a script in a global context 
// Workarounds based on findings by Jim Driscoll 
// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context 
globalEval: function(data) { 
    if (data && rnotwhite.test(data)) { 
     // We use execScript on Internet Explorer 
     // We use an anonymous function so that context is window 
     // rather than jQuery in Firefox 
     (window.execScript || function(data) { 
      window[ "eval" ].call(window, data); 
     })(data); 
    } 
}, 

在IE瀏覽器中調用拋出異常:

"Error: Could not complete the operation due to error 80020101."

數據得到執行參數是由<!-- -->包圍頁面上的JavaScript變量

<!-- 
var id = \"ctrl90900\"; 

var url = \"myur.com/blah.html\"; 

--> 

我使用IE9和jQuery 1.6.2不知道爲什麼這會導致錯誤。

+1

如果您刪除評論,它是否正常工作?這不是有效的JavaScript。 – alex

+0

在傳遞給'$ .globalEval()' - >'str = str.replace(/ <! - \ s *([\ s \ S] *?)\ s *)之前,在字符串上嘗試使用此正則表達式。 > /,'$ 1');'[jsFiddle](http://jsfiddle.net/alexdickson/GUf7Q/)。 – alex

+0

@alex就是這樣。謝謝! –

回答

1

它可能是代碼的評論,這是無效的JavaScript和unnecessary in this day and age

你可以用這個表達式剝離出來......

$.globalEval(str.replace(/<!--\s*([\s\S]*?)\s*-->/, '$1')); 

jsFiddle

+0

看起來像包裝在CDATA中的javscript代碼是一種方式,它不會產生像描述的問題https://developer.mozilla.org/zh/Writing_JavaScript_for_XHTML –

2

至於Internet Explorer而言,如果有any error at all in a script passed to execScript,,它將報告80020101而不是原始錯誤。

因此,還要檢查IE不支持的缺少分號和JS功能。

對於短代碼段落,我發現最有效的調試技術是註釋掉部分代碼並查看錯誤是否仍然出現。如果沒有,請檢查剛剛註釋爲上述錯誤的代碼塊。

+0

'{foo:'bar'}'是完全有效的,只要它是語法有效表達式的一部分,就不會在IE中引發錯誤。 –

+0

你是對的,謝謝。更新。 – cmc

0

只是想補充一點 - 我在包含JavaScript的AJAX調用的PHP腳本中遇到錯誤80020101。 PHP文件中的腳本也以某種方式破壞了,並拒絕在指定的div中渲染任何腳本(PHP的其他元素已經通過,但JavaScript中沒有任何內容 - 我試圖使用HighChart繪製圖表)。

原來在附帶的PHP文件(用於回顯一些文本)中JavaScript內部存在未定義的PHP函數。我用Firebug找到了這個。

因此,確保您的代碼在通過AJAX返回的代碼中沒有任何未定義的函數。