Vì vậy, tôi đang cố gắng tải một tập lệnh động và tìm ra đường dẫn URL mà tập lệnh được tải. Vì vậy, một số người đã cho tôi một giải pháp khá tuyệt vời cho vấn đề này nếu các kịch bản được tải tĩnh (How to get the file-path of the currently executing javascript code). Nhưng tôi cần một giải pháp tự động nạp. Ví dụ:Nhận url của tệp js hiện đang thực thi khi được nạp động
$(function()
{ $.getScript("brilliant.js", function(data, textStatus)
{ // do nothing
});
});
nơi "brilliant.js" có:
var scripts = document.getElementsByTagName("script");
var src = scripts[scripts.length-1].src;
alert("THIS IS: "+src);
Lý tưởng này nên hoặc in ra "brilliant.js" hoặc "⟨ hostname + basepath ⟩ /brilliant.js"
Hiện tại, tệp brilliant.js hoạt động cho các tập lệnh được bao gồm tĩnh, nhưng không phải cho các tập lệnh được bao gồm động (như với $ .getScript). Ai có ý tưởng gì không? Có nơi nào đó trong nhà kho lưu trữ tất cả các tập lệnh đã được tải không?
EDIT: Andras đưa ra một giải pháp khá tốt, mặc dù nó có thể chỉ hoạt động cho jQuery. Vì đó có lẽ là thư viện phổ biến nhất, và chắc chắn những gì tôi sẽ sử dụng. Nó có thể được mở rộng cho các thư viện khác. Đây là phiên bản đã được đơn giản hóa của tôi:
var scriptUri;
curScriptUrl(function(x)
{ scriptUri = x;
alert(scriptUri);
});
function curScriptUrl(callback)
{ var scripts = document.getElementsByTagName("script");
var scriptURI = scripts[scripts.length-1].src;
if(scriptURI != "") // static include
{ callback(scriptURI);
}else if($ != undefined) // jQuery ajax
{ $(document).ajaxSuccess(function(e, xhr, s)
{ callback(s.url);
});
}
}
Tôi thích những gì chamiltongt (bên dưới) cho biết, ajax trong mã, và sau đó eval() nó. Để làm cho nó có thể truy cập trên toàn cầu, tại sao bạn không thiết lập một trang web nhỏ gọn phục vụ mã .js của bạn. Nó sẽ được tập trung và bạn có thể cập nhật mã của bạn cho mọi người dùng ngay lập tức. – logout