2011-08-15 31 views
5

Tôi đã nâng cấp từ jQuery 1.4.2 lên 1.6.2 và bây giờ tôi gặp lỗi (trong IE). Tôi có JavaScript trên trang đó được thực hiện bởi jQuery globalEval() chức năngSau khi nâng cấp lên jQuery 1.6.2, globalEval ném lỗi khi cố gắng thực thi javascript trên trang

// 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); 
    } 
}, 

Trong IE cuộc gọi ném ngoại lệ:

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

Dữ liệu tham số mà có được thực hiện là javascript biến trên trang bao quanh bởi <!-- -->

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

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

--> 

Tôi đang sử dụng IE9 và jQuery 1.6.2 Không chắc chắn lý do tại sao điều này sẽ gây ra lỗi.

+1

Tính năng này có hoạt động nếu bạn xóa nhận xét không? Nó không phải là JavaScript hợp lệ. – alex

+0

Hãy thử sử dụng regex này trên chuỗi trước khi chuyển đến '$ .globalEval()' -> 'str = str.replace (/ /, '$ 1'); '[jsFiddle] (http://jsfiddle.net/alexdickson/GUf7Q/). – alex

+0

@alex là nó. cảm ơn! –

Trả lời

1

Đó có thể là nhận xét về mã, JavaScript không hợp lệ và unnecessary in this day and age.

Bạn có thể cởi nó ra với regex này ...

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

jsFiddle.

+0

Có vẻ như mã javscript gói trong CDATA là cách để đi và nó không tạo ra các vấn đề như mô tả https://developer.mozilla.org/en/Writing_JavaScript_for_XHTML –

2

Nếu có any error at all in a script passed to execScript, khi Internet Explorer có liên quan, nó sẽ báo cáo 80020101 thay vì lỗi ban đầu.

Vì vậy, hãy kiểm tra các dấu chấm phẩy bị thiếu và các tính năng JS không được IE hỗ trợ.

Đối với đoạn mã ngắn, tôi thấy kỹ thuật gỡ lỗi hiệu quả nhất là nhận xét các phần mã và xem lỗi có còn xuất hiện không. Nếu không, hãy kiểm tra khối mã vừa được nhận xét cho các lỗi ở trên.

+0

'{foo: 'bar'}' là hoàn toàn hợp lệ và sẽ không ném một lỗi trong IE miễn là nó là một phần của một biểu thức cú pháp hợp lệ. –

+0

Bạn nói đúng, cảm ơn. Đã cập nhật. – cmc

0

Chỉ muốn thêm một chút vào điều này - tôi đã gặp lỗi 80020101 bất cứ khi nào trong một tập lệnh PHP được gọi là AJAX có JavaScript. Kịch bản bên trong tệp PHP cũng bị phá vỡ bằng cách nào đó và từ chối hiển thị bất kỳ tập lệnh nào trong div được chỉ định (các phần tử khác của PHP đã đi qua, nhưng không có gì bên trong JavaScript - tôi đang cố gắng vẽ biểu đồ bằng HighChart).

Hóa ra có một hàm PHP không xác định bên trong JavaScript trong tệp PHP được bao gồm (được sử dụng để phản hồi một số văn bản). Tôi tìm thấy điều này bằng cách sử dụng Firebug.

Vì vậy, dòng dưới cùng, hãy đảm bảo bạn không có bất kỳ chức năng không xác định nào bên trong mã quay lại qua AJAX.

Các vấn đề liên quan