代码之家  ›  专栏  ›  技术社区  ›  Tom Lianza

我可以从脚本中获取加载javascript库的位置吗?

  •  1
  • Tom Lianza  · 技术社区  · 16 年前

    假设我在www.foo.com上有一个包含此代码的页面:

    <script src="http://www.bar.com/script.js" />
    

    我可以从script.js中编写代码来检查它是否是从bar.com提供的吗?显然document.location.href会给我foo.com。

    谢谢!

    4 回复  |  直到 16 年前
        1
  •  3
  •   Eineki    16 年前
    var scripts = document.getElementsByTagName("script");
    

    为您提供页面中所有脚本的集合 之后,您可以读取它们的SRC属性来查找目标(我希望您知道如何调用脚本)

    for (var i=0, limit=scripts.lenght; i< limit; i++) {
        if (scripts[i].src.substr(<calculate your offset>) == scriptName) {
           // Have you found your script, extract your data
        }
    }
    
        2
  •  1
  •   Eli Grey    16 年前

    找到非工作者脚本位置的唯一方法是非标准 error.fileName ,它仅受Firefox和Opera支持:

    var loc = (new Error).fileName;
    

    如果脚本是一个工作线程(当然不是),那么您可以使用 location 对象。

        3
  •  1
  •   Pekka    16 年前

    如果它真的很重要,您可以通过在每个脚本标记前面定义一个包含脚本URL的字符串来解决它:

    <script type="text/javascript">SCRIPT_URL = "http://www.bar.com/script.js"</script>
    <script src="http://www.bar.com/script.js" />
    

    在脚本文件中,您可以访问URL

    alert("my URL is "+SCRIPT_URL);
    

    不太优雅,但应该有效。

    如果您有一种类似于PHP的服务器端语言,并且不介意通过解释器发送JS文件,那么您也可以这样做(需要注意性能问题!)在JS文件中执行如下操作:

    <script type="text/javascript">var my_url = "<? echo $_SERVER["REQUEST_URI"]; ?>"</script>
    

    但这真的,真的是最后的手段。

        4
  •  0
  •   kennebec    16 年前

    如果你坚持的话,你可以把剧本包装在一种条件下,就像成人尿布一样。

    if(top.location.host==='www.bar.com'){
    //the whole script goes here
    }
    
    else alert('Nyah Nyah Nyah!')