寻找javascript的起源

时间:2009-06-08 04:22:13

标签: javascript web-services

是否可以从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在两个位置都是相同的,但我希望它们能够找到它的来源,这样它就可以调用正确的Web服务方法(来自service-a的script.js应该调用service-a .method,而service.b提供的script.js应该调用service-b.method)

有没有办法在不使用任何服务器端代码的情况下找出script.js的来源?

2 个答案:

答案 0 :(得分:2)

您可以分析包含script.js标签的html源代码,并从那里检索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;
}

答案 1 :(得分:2)

嗯,这是一种黑客行为,您可以抓取文档中的所有<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文件的脚本标记的来源。