Нахождение происхождения JavaScript - PullRequest
0 голосов
/ 08 июня 2009

Возможно ли из кода Javascript выяснить, "откуда" оно пришло?

Мне нужно было это предоставить сценарии, которые могли бы запускать независимую от папок, например,:

http://web1/service-a/script.js
http://web2/some-folder/service-b/script.js

И они связаны в:

http://web1/page1.html
http://web2/page2.html

Файл script.js идентичен в обоих местах, но я бы хотел, чтобы они могли выяснить, откуда он исходит, чтобы он мог вызывать нужные методы веб-службы (script.js из service-a должен вызывать service-a .method, в то время как script.js, который обслуживается из service-b, должен вызывать service-b.method)

Есть ли способ узнать, откуда появился script.js без использования кода на стороне сервера?

Ответы [ 2 ]

2 голосов
/ 08 июня 2009

Ну, это что-то вроде хака, вы можете взять все теги <script> в документе, посмотреть, какой из них имеет имя файла, и выполнить логику оттуда.

document.getElementsByTagName('script'); это почти все, что вам нужно. Остальное - базовый JS.

Еще более интересным, чем цикл по всем возвращаемым элементам (хотя это, вероятно, наиболее безопасно), является то, что мы можем просто посмотреть только на последний элемент, возвращенный вызовом выше, поскольку Javascript гарантирует, что это должен быть тег <script> во время его анализа (за исключением отложенных сценариев). Итак, этот код:

var all_scripts = document.getElementsByTagName('script');
var current_script = scripts[all_scripts.length-1];
alert(current_script.src);

Оповещает источник тега сценария, используемого для включения текущего файла Javascript.

2 голосов
/ 08 июня 2009

Вы можете проанализировать источник html, где script.js включен для тега, и получить путь к script.js оттуда. Включите следующую функцию в script.js и используйте ее для получения пути.

function getPath() {
   var path = null;
   var scriptTags = document.getElementsByTagName("script");

   for (var i = 0; i < scriptTags.length; i++) {
      var scriptTagSrc = scriptTags.item(i).src;

      if (scriptTagSrc && scriptTagSrc.indexOf("script.js") !== -1) {
          path = scriptTagSrc;
          break;
      }
   }

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