外部网站使用这种方式引用我们的一个js文件:
<script type="text/javascript" src="test.js" data="1"></script>
data为参数,不同的外部网站其值不一样,但肯定有值。在test.js中通过getAttribute("data")获取data的值,有时候得到的是null,90%以上的情况都能正常获取值,获取不到的情况没有发现什么规律,各种浏览器都有这种情况。请教高手,可能的原因有哪些?有什么思路也欢迎赐教啊!不讨论这种传递参数的方式本身,只寻求解决获取不到参数值的问题。Javascript

解决方案 »

  1.   

    test.js中这样试试
    var scr = document.getElementsByTagName("script");
    var data = scr[scr.length-1].getAttribute("data");
    alert(data);
      

  2.   

    感觉吧获取应该是没问题的, 可能会因为环境不同的原因导致的
       var data = $("script").attr("data");
    比如这样可以获取到,但是我调用你的test.js 而我界面假设有二个js文件,那么上面的写法就不可以,因为获取到的是第一个  jquery-1.4.1.js 而不是第二个 当然 如果改成
    $("script").last().attr("data"); 这样就可以获取到,  建议js 加个ID ,如果不想加,就循环遍历所有script  js文件判断是否包含 data属性,  如果只是单独的 通过script 标签获取是不准确的
    <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
    <script type="text/javascript"   src="test.js" data="1"></script>
      

  3.   

    谢谢jslang,但test.js中就是这么做的
      

  4.   

    感觉吧获取应该是没问题的, 可能会因为环境不同的原因导致的
       var data = $("script").attr("data");
    比如这样可以获取到,但是我调用你的test.js 而我界面假设有二个js文件,那么上面的写法就不可以,因为获取到的是第一个  jquery-1.4.1.js 而不是第二个 当然 如果改成
    $("script").last().attr("data"); 这样就可以获取到,  建议js 加个ID ,如果不想加,就循环遍历所有script  js文件判断是否包含 data属性,  如果只是单独的 通过script 标签获取是不准确的
    <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
    <script type="text/javascript"   src="test.js" data="1"></script>谢谢ILOVE_ASPNET,test.js是获取最后一个script,然后取data参数的。
    var scr = document.getElementsByTagName("script");
    var data = scr[scr.length-1].getAttribute("data");
      

  5.   

    谢谢jslang,但test.js中就是这么做的
    那说遍历所有script判断是否包含data属性
      

  6.   

    感觉吧获取应该是没问题的, 可能会因为环境不同的原因导致的
       var data = $("script").attr("data");
    比如这样可以获取到,但是我调用你的test.js 而我界面假设有二个js文件,那么上面的写法就不可以,因为获取到的是第一个  jquery-1.4.1.js 而不是第二个 当然 如果改成
    $("script").last().attr("data"); 这样就可以获取到,  建议js 加个ID ,如果不想加,就循环遍历所有script  js文件判断是否包含 data属性,  如果只是单独的 通过script 标签获取是不准确的
    <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
    <script type="text/javascript"   src="test.js" data="1"></script>谢谢ILOVE_ASPNET,test.js是获取最后一个script,然后取data参数的。
    var scr = document.getElementsByTagName("script");
    var data = scr[scr.length-1].getAttribute("data");嗯,如果你是这样写的确实是获取最后一个script 再取属性data,  那应该是可以获取到的啊,不过建议吧,为了保证扩展性强点,还是换种方式吧,呵呵,因为test.js 在外部界面引用时候不一定 要是最后一个script.
      

  7.   


    遍历了仍然是同样的结果:少数情况下取不到参数data的值。js和嵌入js的html是公开访问的,我自己始终没有遇到过这种情况,也无法进行重现。初步估计可能是这部分用户的DNS被劫持了。
      

  8.   


    由于是同步加载js,并且js是放在iframe中加载的,所以执行到test.js时,test.js获取的最后一个script,一定是test.js。也试了遍历所有script取data的方式,依然是同样的结果。怀疑是请求test.js时被劫持了。
      

  9.   


    谢谢海龙。js和嵌入js的html是公开访问的,大概千分之一的情况下取不到参数data。我自己始终没有遇到过这种情况,更无法进行重现,没有机会用debug看啊。
      

  10.   

    可以试验一下延迟获取参数,如果是代码一下载就获取,有可能是不同的浏览器对这个script标签的解析还未完成。
      

  11.   

    script标签还未解析完成就执行了其中的脚本,这有可能么?
      

  12.   

    script标签还未解析完成就执行了其中的脚本,这有可能么?
    不确定,只是怀疑。
      

  13.   

    根据测试,初步认为是被运营商劫持了,请求test.js时获取整个script的内容只获取到了src,其它参数都获取不到,且多了type参数,和几个莫名其妙值,比如:
    re.php?src=t4127&t=&ci=1981567041&r=
    参数值会变,且没有明显的变化规律