Подтвердить что ты не робот

Получение URL-адреса исполняемого файла JavaScript (в основном проблема с IE6-7)

Привет всем, я пытался собрать общую функцию, которая извлекает абсолютный URL-адрес исполняемого файла JavaScript на веб-странице:

http://gist.github.com/433486

В основном вы вызываете что-то вроде этого:

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)? Спасибо заранее!

РЕДАКТИРОВАТЬ: Кроме того, это не будет работать в каждом случае, поэтому, пожалуйста, не рекомендуется:

var scripts = document.getElementsByTagName("script");
return scripts[scripts.length-1].src;

Я бы хотел, чтобы он работал в случае динамически созданных тегов script (возможно, не помещенных последним на странице), а также lazy-loading.

4b9b3361

Ответ 1

Многое зависит от того, к чему у вас есть доступ. Если, как кажется, вы пытаетесь сделать это полностью в JS-коде, я не считаю, что вы можете это сделать по некоторым причинам, показанным выше. Возможно, вы могли бы получить 90% пути, но не быть окончательным.

Если вы работаете в среде dotnet (которая является единственной, которую я знаю), я бы предложил использовать модуль, который будет перехватывать все запросы JS и добавлять в них местоположение запроса или что-то в этом роде.

Я думаю, вам нужно обратиться к этому со стороны сервера, а не на стороне клиента. Я не думаю, что у вас будет окончательный ответ на стороне клиента. Я думаю, вы также будете пытаться получить ответ со стороны сервера, но вы можете быть более успешным.

Ответ 2

Извините, я подозреваю, что вы можете бороться с этим. IE ранее, чем версия 8, обычно выдает сообщения об ошибках из javascript-ошибок формы:

line: 342
char: 3
error: expected identifier, string or number
code: 0
url: http://example.com/path/to/resource

где url - это window.location.href, а не URL-адрес внешнего ресурса Javascript, который содержит эту проблему. Я полагаю, что IE дает бесполезное значение URL-адреса, так как URL-адрес script недоступен для IE в этой точке, и ни один из них не доступен для любого Javascript, который вы могли бы написать, чтобы попытаться отобразить его.

Я хотел бы иметь возможность ссылаться на заметки о выпуске IE8, в которых говорится, что эта ошибка/функция исправлена, поэтому причина, по которой я создал это как сообщество wiki. Мой MSDN foo довольно слаб!