2011-12-30 21 views
7

Tôi vừa xem qua số this sample code, thẻ này có thẻ tập lệnh với cả nguồn bên ngoài và nội dung. Tôi cho rằng đây là một cách thông minh để truyền một số thông tin đến kịch bản kèm theo. Làm thế nào nó hoạt động?Thẻ tập lệnh với cả nguồn và cơ quan bên ngoài

<html> 
    <head> 
    <script src="http://unhosted.org/remoteStorage.js">{ 
     onChange: function(key, oldValue, newValue) { 
     if(key=='text') { 
      document.getElementById('textfield').value= newValue; 
     } 
     }, 
     category: 'documents' 
    }</script> 
    </head> 
+0

Tôi không nghĩ đó là câu hỏi về cách thức hoạt động của nó hơn là điều này tạo sự khác biệt trong việc thực thi mã. – Purag

Trả lời

6

Tập lệnh có trong thẻ sẽ không được đánh giá trong các trường hợp bình thường. Điều tôi nghĩ đang xảy ra trong ví dụ của bạn là remoteStorage.js đang tự đọc nội dung khi được đánh giá. một cái gì đó như thế này

//grab the last script tag in the DOM 
//this will always be the one that is currently evaluating during load 
var tags = document.getElementsByTagName('script'); 
var tag = tags[tags.length -1]; 
//force evaluation of the contents 
eval(tag.innerHTML); 

Mặc dù điều này có vẻ gọn gàng trong đánh dấu, tôi, bản thân tôi sẽ chỉ sử dụng một thẻ tập lệnh riêng biệt và tránh đánh giá bắt buộc này.

2

Nó không hoạt động. Trạng thái html specs nếu có thuộc tính src trên thẻ tập lệnh, nội dung của số <script></script> sẽ bị bỏ qua và chỉ mã ở vị trí src mới được thực hiện.

Mặt khác, điều này sẽ làm suy giảm một cách duyên dáng trên các trình duyệt hiểu javascript, nhưng không đủ mới để hỗ trợ mã JS bên ngoài. Nếu bất kỳ trình duyệt nào như thế này tồn tại, ai biết được, nhưng nói chung, mã onchange trong đoạn mã của bạn KHÔNG được thực thi bởi bất kỳ trình duyệt hiện đại nào.

+0

Nếu những gì bạn nói là đúng, mã này không có ý nghĩa gì cả. Tôi bằng cách nào đó nghi ngờ điều đó. – Thilo

+0

Họ thậm chí còn có hướng dẫn rõ ràng để viết thẻ tập lệnh như sau: "Bên trong phần tử , chỉ định 'onChange' và 'category' như dưới đây" – Thilo

+0

Đúng theo thông số. Thật không may, có quá nhiều trình duyệt không hợp lệ (* koff * microsoft * koff *), những người xử lý các thông số kỹ thuật như những câu chuyện cười và làm việc của riêng họ. –

3

Mặc dù trình duyệt được cho là bỏ qua nội dung của phần tử script khi có thuộc tính src, điều này chỉ có nghĩa là chúng không xử lý theo cách thông thường (phân tích cú pháp và chạy dưới dạng mã JavaScript). Nội dung vẫn được lưu trữ trong DOM và có thể được đọc bởi một tập lệnh. Các nội dung có thể chỉ là về bất cứ điều gì sau đó, không nhất thiết phải mã JavaScript nhưng bất kỳ dữ liệu.

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