首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • firefox动态加载JS文件失败,但IE下没问题 [已结贴,结贴人:iloveora]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 17:03:42 楼主
    动态改变加载的JS文件。

    下面b.html在IE中点按钮执行正常,弹出“我执行了”框,每次点击都会弹出。但在firefox中只有第一次点击才能弹出,之后再点就无效了,也不报错。
    怎么办啊!各位大仙帮帮忙。解决即给分,谢谢!

    需加载的文件a.js内容:
    alert('我执行了!');

    b.html代码如下:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>测试 </title>
    <script type="text/javascript">
    function myclick(){
            document.getElementById("thejs").src="a.js";
    }
    </script>
    <script type="text/javascript" id="thejs"> </script>
    </head>
    <body>
    <input type="submit" value="查询" onClick="javascript:myclick();" />
    </body>
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 18:00:391楼 得分:0
    居然没人知道?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 18:32:012楼 得分:0
    被缓存了.........?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 18:38:503楼 得分:0
    我也考虑过这个问题,因此改了function,加了如下随机数,但还是不成。
    function myclick(){
          var par2 = Math.random();
          par2 = par2 * 1000000000;
          var url = "a.js";
          url = url + '?par2=' + par2;
          document.getElementById("thejs").src=url;
    }

    引用 2 楼 gghunter 的回复:
    被缓存了.........?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 07:27:414楼 得分:0
    ?Math.random(); 
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 09:37:405楼 得分:0
    大家都上班了吧?有人知道吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 10:17:506楼 得分:0
    up一个
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • pzhuyy
    • 等级:
    发表于:2008-05-12 11:47:047楼 得分:0
    才存一个b.js看,能否弹出.
    咋看咋觉得这样实现有点别扭...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 12:37:248楼 得分:8
    以前用ajax从服务器调出JS function用eval接收能成功,这种也觉得别扭没试验过,有人说createElement("script")能行,也没去尝试,觉得这样都一样存了缓存,没必要多此一举了,不想保留缓存就用eval吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • pla18sep
    • 等级:
    发表于:2008-05-12 12:40:159楼 得分:0
    测试了一下,
    貌似ff只加载一次 <script type="text/javascript" id="thejs"> </script>
    后面无论怎么改src值,只改变html不会再次加载内容,
    而相同的操作应于iframe是没有异常的

    还是使用ajax方法吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mumuTiger
    • 等级:
    发表于:2008-05-12 13:09:3910楼 得分:0
    引用 7 楼 pzhuyy 的回复:
    才存一个b.js看,能否弹出.
    咋看咋觉得这样实现有点别扭...


    ...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 13:21:4511楼 得分:0
    并不是要实现那个alert才这么做的,而是有其他的用途采用重载JS文件。
    AJAX其实也想过,但是不太想这么做,不知道有没有什么解决方法?

    最终目的就是可以多次执行一个点击后产生的新的JS文件。


    引用 7 楼 pzhuyy 的回复:
    才存一个b.js看,能否弹出.
    咋看咋觉得这样实现有点别扭...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • pla18sep
    • 等级:
    发表于:2008-05-12 13:52:1812楼 得分:3
    引用 11 楼 iloveora 的回复:
    并不是要实现那个alert才这么做的,而是有其他的用途采用重载JS文件。
    AJAX其实也想过,但是不太想这么做,不知道有没有什么解决方法?
    最终目的就是可以多次执行一个点击后产生的新的JS文件。

    把a.js里的内容封装到函数内吧!
    a.js:
    function show(){
    alert('我执行了!');
    }

    b.html:
    function myclick(){
            document.getElementById("thejs").src="a.js";
            show();
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 15:39:5813楼 得分:0
    这样报错,“缺少对象”。

    引用 12 楼 pla18sep 的回复:
    引用 11 楼 iloveora 的回复:
    并不是要实现那个alert才这么做的,而是有其他的用途采用重载JS文件。
    AJAX其实也想过,但是不太想这么做,不知道有没有什么解决方法?
    最终目的就是可以多次执行一个点击后产生的新的JS文件。

    把a.js里的内容封装到函数内吧!
    a.js:
    function show(){
    alert('我执行了!');
    }

    b.html:
    function myclick(){
            document.getElementById("thejs").src="a.js";
      …
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 15:47:1414楼 得分:0
    动态装载何需这样
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 16:10:4315楼 得分:0
    对了,a.js这个文件是我无法改变的。只能改变b.html。

    引用 12 楼 pla18sep 的回复:
    引用 11 楼 iloveora 的回复:
    并不是要实现那个alert才这么做的,而是有其他的用途采用重载JS文件。
    AJAX其实也想过,但是不太想这么做,不知道有没有什么解决方法?
    最终目的就是可以多次执行一个点击后产生的新的JS文件。

    把a.js里的内容封装到函数内吧!
    a.js:
    function show(){
    alert('我执行了!');
    }

    b.html:
    function myclick(){
            document.getElementById("thejs").src="a.js";
      …
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 16:15:3816楼 得分:0
    我在ff上调试这段代码时,发现每次点击,document.getElementById("thejs").src都会被改变,但是只有第一次载入时执行了,再点击,就只改变js文件地址,但没有实际执行。不知道是不是顺序问题,或者需要别的什么。注意a.js是不能改变的,因为是别人动态生成的。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>测试 </title>
    <script type="text/javascript" id="thejs"> </script>
    <script type="text/javascript">
    function myclick(){
            var par2 = Math.random();
          par2 = par2 * 1000000000;
            var url = "a.js";
          url = url + '?par2=' + par2;
            document.getElementById("thejs").src=url;
    //      show();
    }
    </script>
    </head>
    <body>
    <input type="submit" value="查询" onClick="javascript:myclick();" />
    </body>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 10:49:5517楼 得分:0
    啊!真的没人可以解决么?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 16:46:4918楼 得分:0
    firebug显示src已经被改成了a.js,但是里面的内容没有执行而已。。。。

    不知道怎么写,已经很久没有直接js裸奔了,都是jquery,。。。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 17:40:0619楼 得分:0
    是的,我就是这么测的,src改是改了,可是不执行
    盼达人。这个实现不了,我的网页在ff上就玩不转

    引用 18 楼 yeaky 的回复:
    firebug显示src已经被改成了a.js,但是里面的内容没有执行而已。。。。
    不知道怎么写,已经很久没有直接js裸奔了,都是jquery,。。。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 17:49:4920楼 得分:39
    是需要动态创建 <script> 才可以的.

    如下就可以了:
    HTML code
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>测试 </title> <script type="text/javascript"> function myclick(){ var oldS=document.getElementById('thejs'); if(oldS) oldS.parentNode.removeChild(oldS); var t=document.createElement('script'); t.src='a.js'; t.type='text/javascript'; t.id="thejs"; document.getElementsByTagName('head')[0].appendChild(t); //document.getElementById("thejs").src="a.js"; } </script> <script type="text/javascript" id="thejs"> </script> </head> <body> <input type="submit" value="查询" onClick="javascript:myclick();" /> </body>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 18:29:3721楼 得分:0
    非常感谢!这个可以。先结贴!可是我还是不明白为什么?这种方法好像也见过,不过我觉得跟原来那种没区别所以没在意。现在还是迷惑。。。
    ff必须要重新创建一次script才能执行么?他为什么不能像IE一样当src改变时重新载入呢?
    能否指点一下,谢谢!


    引用 20 楼 CarlosYoung 的回复:
    是需要动态创建 <script> 才可以的.

    如下就可以了:

    HTML code
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>测试 </title>
    <script type="text/javascript">
    function myclick(){

            var oldS=…
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved