Hey tất cả, tôi đã cố gắng để nhét vào một hàm tổng quát để lấy URL tuyệt đối của một tập tin JavaScript thực hiện trên một trang web:Bắt URL của thi tập tin JavaScript (IE6-7 vấn đề chủ yếu)
về cơ bản bạn có thể gọi một cái gì đó như thế này:
getScriptName(function(url) {
console.log(url);
// http://www.example.com/myExternalJsFile.js
});
bên trong một tập tin JavaScript bên ngoài trên một trang và sau đó có thể làm điều gì đó với nó (như tìm thẻ <script>
mà nạp nó chẳng hạn).
Nó hoạt động tốt trong hầu hết các trình duyệt mà tôi đã thử nghiệm (Firefox, Chrome, Safari, Opera v10 ít nhất và IE 8).
Có vẻ như không thành công, tuy nhiên, trong IE 6 và 7. Hàm gọi lại được thực thi, nhưng tên đã truy xuất là URL đến trang HTML chính, không phải tệp JavaScript. Tiếp tục với ví dụ, getScriptName
gọi hàm gọi lại với thông số: http://www.example.com/index.html
Vì vậy, tất cả những gì tôi thực sự hỏi là có cách nào khác để lấy URL của tệp JavaScript hiện tại (có thể là trình duyệt IE 6 và 7 cụ thể không)? Cảm ơn trước!
EDIT: Ngoài ra, điều này sẽ không làm việc trong mọi trường hợp, vì vậy xin đừng khuyên nó:
var scripts = document.getElementsByTagName("script");
return scripts[scripts.length-1].src;
Tôi muốn nó hoạt động trong trường hợp thẻ script tự động tạo ra (có thể không được đặt cuối cùng trong trang), hay còn gọi là lười biếng.
Mã và câu hỏi hay. Mặc dù tôi không biết câu trả lời cho điều này, tôi chỉ muốn cung cấp cho bạn một vài tối ưu hóa: bạn có thể thay đổi mọi 'obj ['prop']' thành 'obj.prop' và như 'typeof' luôn trả về một chuỗi, bạn không phải kiểm tra nhận dạng (' === '); thử nghiệm cho bình đẳng ('==') là đủ tốt. Những điều này thực hiện tốt hơn một chút so với những thứ trong mã của bạn. –
Cảm ơn. Ya, tôi biết tôi có thể thay thế obj ['prop'] thành obj.prop, tôi chỉ có nó theo cách đó để chuẩn bị có chức năng được gửi đến Google Closure Compiler, nó sẽ mang những tên biến đó. Tôi sẽ thay đổi === thành == mặc dù, cảm ơn! – TooTallNate
Tôi vừa thử truy cập 'obj ['prop']' chống lại 'obj.prop', nhưng trái với những gì tôi nghĩ là trường hợp, trong Firefox, sự khác biệt là không đáng kể, trong khi Chrome trước đây thực sự * nhanh hơn * . Tôi thực sự ngạc nhiên về điều này, nó có thể có một cái gì đó để làm với 'biên dịch' của JavaScript của V8. –