Привет всем, я пытался собрать общую функцию, которая извлекает абсолютный URL-адрес исполняемого файла JavaScript на веб-странице:
В основном вы можете вызвать что-то вроде этого:
getScriptName(function(url) {
console.log(url);
// http://www.example.com/myExternalJsFile.js
});
внутри внешнего файла JavaScript на странице, а затем может что-то с ним сделать (например, найти тег <script>
, который его загрузил).
Он отлично работает почти во всех браузерах, которые я тестировал (Firefox, Chrome, Safari, Opera v10, по крайней мере, и IE 8).
Однако в IE 6 и 7, похоже, это не удается. Функция обратного вызова выполняется, но полученное имя является URL-адресом главной HTML-страницы, а не файла JavaScript. Продолжая пример, getScriptName
вызывает обратный вызов с параметром: http://www.example.com/index.html
Итак, все, что я действительно спрашиваю, это есть ли какой-то другой способ получить URL-адрес текущего файла JavaScript (который может быть специфичным для IE 6 и 7 хакерством)? Заранее спасибо!
EDIT: Кроме того, это не будет работать в каждом случае, поэтому, пожалуйста, не рекомендуйте это:
var scripts = document.getElementsByTagName("script");
return scripts[scripts.length-1].src;
Я бы хотел, чтобы это работало в случае динамически создаваемых тегов сценария (возможно, не размещаемых последними на странице), иначе называемых ленивой загрузкой.
obj['prop']
наobj.prop
, а посколькуtypeof
всегда возвращает строку, вам не нужно проверять подлинность (===
); проверка на равенство (==
) достаточно хороша. Они работают немного лучше, чем вещи в вашем коде. - person Marcel Korpel   schedule 11.06.2010obj['prop']
по сравнению сobj.prop
, но вопреки тому, что я думал, в Firefox разница была незначительной, тогда как в Chrome первый был на самом деле быстрее, чем последний. Я очень удивлен этим, возможно, это как-то связано с «компиляцией» JavaScript в V8. - person Marcel Korpel   schedule 12.06.2010eval()
или аналогичный, что будет иметь тот же эффект, даже если код исходил из обычного<script>
включения. - person Spudley   schedule 03.07.2011