2012-08-30 10 views
17

Tôi đã thử nghiệm trang web của mình, trong IE8 và gặp phải lỗi Unexpected call to method or property access. đáng sợ.Tạo thẻ tập lệnh trong IE8

Sau nhiều lần gỡ lỗi (trình gỡ xuống của IE8), tôi đã tìm thấy dòng vi phạm.

$('<script>').html(JSData).appendTo('head') 

Sự cố là $('<script>').html(JSData). Tôi đã thử chạy chỉ trong giao diện điều khiển, và tôi vẫn có lỗi.

Tại sao IE8 không thể đặt .html trên thẻ tập lệnh mới được tạo?

P.S. Đây không quá:

$(document.createElement('script')).html(JSData) 

CẬP NHẬT: Tôi đã cố gắng để tạo ra các thẻ script không jQuery:

var scriptTag = document.createElement('script'); 
scriptTag.type = 'text/javascript'; 
scriptTag.innerHTML = JSData; 

Trên dòng scriptTag.innerHTML = JSData;, IE8 cho Unknown runtime error. Cảm ơn IE8.

+4

Bạn đã thử sử dụng 'văn bản' thay vì' html' chưa? – Shmiddty

+0

Có vẻ như nó sẽ dễ dàng hơn/tốt hơn để chỉ 'eval()' kịch bản. – Pointy

+0

@Pointy: Tôi có thể sử dụng 'eval' (hay đúng hơn là' $ .globalEval' của jQuery), nhưng tôi đã tìm ra điều này có thể là "nhanh hơn". –

Trả lời

15

Phương pháp chỉ javascript của bạn cần thêm phần tử tập lệnh vào tài liệu.

IE < 9 không nhận ra innerHTML hoặc childNodes trên thẻ tập lệnh, nhưng tất cả trình duyệt đều hỗ trợ thuộc tính văn bản.

var scriptTag = document.createElement('script'); 
scriptTag.text= JSData; 
document.body.appendChild(scriptTag); 
+0

Hmm, điều này dường như làm việc. Tò mò rằng '$ ('