2016-02-25 16 views
6

Dưới đây là một số mẫu mã:Finding currentScript trong HTML

HTML

<script> alert('This is alert!') </script> 

JS

window.alert = function(data) //alert() over-riding 
{ 
    scriptObject = document.currentScript; //gives me <script> object 
} 

Cập nhật: Đoạn mã trên không dường như làm việc ngay bây giờ (Nó hoạt động sớm hơn, compatibility removed for IE) trong Internet Explorer 11.420.10586.0. Tại sao nó có thể tìm thấy đối tượng Script trong Chrome, Firefox, Safari và Microsoft Edge, nhưng không phải trong Internet Explorer? Có cách nào khác không?


Vấn đề:

HTML

<script> ReferenceError.prototype.__defineGetter__('name', function fff() { javascript:alert(1) }),x </script> 

JS

window.alert = function(data) //alert() over-riding 
{ 
    scriptObject = ? // I need to get the Script object 
} 

tôi đã cố gắng arguments.callee.caller để vây d fff(), nhưng không thể bắt đối tượng tập lệnh.

Cảnh báo() không thực thi trong Chrome cho tập lệnh ở trên. Sử dụng Firefox, thay vào đó. Tôi không thể nhận được đối tượng kịch bản trong bất kỳ trình duyệt nào.

Bất kỳ giải pháp nào?

+1

https://developer.mozilla.org/en-US/docs/Web/API/Tài liệu/currentScript # Browser_compatibility <- xem bảng hỗ trợ, nghi ngờ nó hoạt động trong IE11 trước đây. – epascarello

+0

Rất tiếc. IE đã được cập nhật nội bộ, có thể được. Có cách nào thay thế cho IE không? –

Trả lời

1

Trong kịch bản đơn giản nhất khi bạn ghi đè alert được gọi ngay lập tức trong (chặn) kịch bản, đơn giản document.scripts[document.scripts.length-1] có thể là tốt để đi:

<pre id="log"></pre> 
 

 

 
<script> 
 
window.alert = function(a){ 
 
log.innerText += a + ' ' + document.scripts[document.scripts.length-1].outerHTML + '\n'; 
 
} 
 
</script> 
 

 
<script id="a">alert('first')</script> 
 

 
<script id="b">alert('second')</script> 
 

 
<script id="c">alert('third')</script>

+0

Tính năng này hoạt động trong IE. Nhưng, nếu có quá nhiều kịch bản, ví dụ, trong ví dụ của bạn, một số 100 kịch bản liên tục, nó sẽ được xác định? Ý tôi là thứ tự của dữ liệu trong 'log'. Ngoài ra, vui lòng xem phần cảnh báo 'ReferenceError' của vấn đề thứ hai. –

+1

Miễn là các tập lệnh đó sẽ tĩnh (không được chèn động sau khi tải dưới dạng tập lệnh không phải cuối cùng trong cây tài liệu) và đồng bộ (không đồng bộ), có, nó phải xác định và đảm bảo hoạt động bình thường: của JavaSript. (Tôi không chắc về TBH không đồng bộ.) – myf

+0

Điều này đã xóa nó. Cảm ơn. Bất kỳ ý tưởng nào về cảnh báo 'Tham chiếuError' phần thứ hai? –