Получение URL-адреса выполнения файла JavaScript (в основном проблема IE6-7) - PullRequest
19 голосов
/ 11 июня 2010

Привет всем, я пытался собрать общую функцию, которая получает абсолютный 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;

Мне бы хотелось, чтобы это работало в случае динамически создаваемых тегов сценария (возможно, не помещенных последними на странице), иначе называемых отложенной загрузкой.

Ответы [ 2 ]

1 голос
/ 04 июля 2011

Извините, я подозреваю, что вы можете бороться с этим.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-адрес сценария недоступен для IE на этом этапе, и при этом он не доступен ни для какого Javascript, который вы можете написать, чтобы попытаться отобразить его.

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

1 голос
/ 04 июля 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...