首先说下..你这个代码是错误的.. var objHead=document.getElementsByTagName("head"); 改成 var objHead=document.getElementsByTagName("head")[0]; 就可以了   oScript.defer = "defer"; 这个可以去掉 ie only

解决方案 »

  1.   

    还有就是你的HTML不完整..<head> 节点都没有
      

  2.   

    我觉得代码有个小问题,另外想法需要考虑一下
    代码:setTimeout如果作为定时用的话,应该调用本身inMsg(),而不是调用另外一个函数LoadJS()。或者把setTimeout换成setInterval
    想法:它这里的报错,“script为空或不是对象”,不是指你页面上调用时的参数错误,而是KKPlayer.js本身没有执行成功
    js主要是在页面上进行交互,那么它很多地方可能要用到页面里的对象/元素,仅仅将一段js引用进来,但是整个页面里面,没有该js原页面中应有的环境,应该是很难实现的
    简单看了一下,KKPlayer.js中应该这一句没有执行成功
    document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
    之后它又
    var script=document.getElementById("__ie_onload");
    这个script,可以在后面简单输出看一下,alert(script);值是null
    那么其他地方调用这个script对象时,应该会报错:“script为空或不是对象”
      

  3.   

    但是我直接用HTML输入
    <div id="ShowMsg">
       <script src='http://play.kankan.xunlei.com/u/JSPlayer/KKPlayer.js' charset='gbk' width='538' height='477' autoPlay='1' source='mid=1314' unid='11865'></script> 
    </div>就正常执行啊
      

  4.   

    这个,你说得很有道理,呵呵,
    我想应该是,直接插入的话,会调用 KKPlayer.js 最后一句 window.onload=init;
    那么 在 LoadJS() 最后加入init();function LoadJS()(){
    …………
    init();
    }虽然报错,但是直接插入的效果,不知是不是你想要的
      

  5.   

    1楼说的得没错啊
    你抄我的代码都抄错啊??
    <script language="JavaScript">  
    function LoadJS(fileUrl)  
    {  var objHead=document.getElementsByTagName('head'); 
        var oScript= document.createElement("script");   
        oScript.defer = "defer"; 
        oScript.src=fileUrl ;  
        objHead[0].appendChild(oScript); 
    }  
    setTimeout(function(){LoadJS("tmp.js");},1000);  
    </script>看到给你的代码中没?红色部分!
      

  6.   

    chinmo 你测试我的代码没有嘛?
    另外我的问题3的怀疑 你能帮我解释有一下吗?
    就是那些参数的问题
      

  7.   

    而你这个用的是ShowMsg.appendChild(oScript);    
    所以你没有定义
      

  8.   

    楼上的意思,为<head>对象创建一个子节点,子节点为<script>标签,并修改src,和lz的做法还类似把,lz将<script>作为ShowMsg的子节点创建,lz主要问题是,仅这样载入KKPlayer.js不能正常执行,因为KKPlayer.js会有它自己处理的方式,所以我想,引用别人的js最主要考虑是,怎样保证有相同的运行环境
      

  9.   

    我看了下那个JS,确实是他的JS有问题
    你调用CSDN得JS是没问题
      

  10.   

    当然啊
    你直接输入的是正常的
    但是你用JS加入的肯定不行
    你自己好好看下他的代码JS里有干扰的代码
      

  11.   

    怎么改? 在你的函数
    function LoadJS(){ 
    //你的代码
    init(); //最后加上这一句
    } 这样我测试还是有效的关于它的js
    KKPlayer.js我看到的是,它用两种形式初始化方法init();
    1。一种是window.onload
    2。一种是判断浏览器状态readyState
    当你直接用HTML输入,就会使用1,正常显示
    否则,你自己使用节点创建的方式,动态加入js,那么将无法使用1。要使用2,但2由于种种原因没有成功执行,所以只能模仿使用1,就是上面说的,LoadJS()函数里面加入 init(),自己来初始化
      

  12.   

    另外,它js判断是否使用 2,主要判断是否有元素 __ie_onload
    这样的话,你可以再页面里面自己加入一个,比如
    <span id=__ie_onload></span>这样就不会报错了但是想让它js运行,你还是需要在你的函数LoadJS()里面,最后加入init();
      

  13.   

    呵呵
    init(); 加上可以是为了执行他的代码可以播放
    但是那个错误还是会存在的
      

  14.   

    /*@cc_on @*//*@if(@_win32)if(!document.getElementById("__ie_onload")){document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");var script=document.getElementById("__ie_onload");script.onreadystatechange=function(){if(this.readyState=="complete"){init();}};};/*@end @*/
    呵呵
      

  15.   

    <html>
    <head>
    <title> New Document </TITLE>
    <script language="javascript">
     <!--
    function LoadJS()  
    {  
        var objHead=document.getElementsByTagName("head"); 
    var ShowMsg = document.getElementById("ShowMsg");
        var oScript= document.createElement("script");   
            oScript.defer = "defer"; 
            oScript.src="http://play.kankan.xunlei.com/u/JSPlayer/KKPlayer.js";
        oScript.charset="gbk";   //尝试这样加
        oScript.width="538";    //尝试这样加
        oScript.height="477";    //尝试这样加
        oScript.autoPlay="1";   //尝试这样加
        oScript.source="mid=2686";   //尝试这样加
        oScript.unid="11865";   //尝试这样加
            ShowMsg.appendChild(oScript);  
    init();  
    }  function inMsg()
     {
        setTimeout(function(){LoadJS();},100);  
        
     }
     //-->
     </script></head>
    <body><div id="ShowMsg">
       <script src='http://play.kankan.xunlei.com/u/JSPlayer/KKPlayer.js' charset='gbk' width='538' height='477' autoPlay='1' source='mid=1314' unid='11865'></script>
    </div><a href="javascript:inMsg();">点</a>
    <span id=__ie_onload> </span> </body>
    这个写法是正确的,排除了他的干扰代码
      

  16.   

    您们 还没帮我解释下那些参数的问题    oScript.charset="gbk";   //尝试这样加
        oScript.width="538";    //尝试这样加
        oScript.height="477";    //尝试这样加
        oScript.autoPlay="1";   //尝试这样加
        oScript.source="mid=2686";   //尝试这样加
        oScript.unid="11865";   //尝试这样加我这样的加法对吗?
    原来是这样的:<script src='********.js' charset='gbk' width='538' height='477' autoPlay='1' source='mid=1314' unid='11865'></script>
    我这样加之后 貌似有点问题,我那个播放器不够完美了
    不能全屏,并且没有字幕提示等等。一直显示“准备就绪”,
    你们那看 是这样吗?好了 不管怎么样,差不多可以结帖了。非常谢谢两位.请大家记住chinmo 和 testoktest 
      

  17.   

    oScript.charset="gbk";   //尝试这样加
        oScript.width="538";    //尝试这样加
        oScript.height="477";    //尝试这样加
        oScript.autoPlay="1";   //尝试这样加
        oScript.source="mid=2686";   //尝试这样加
        oScript.unid="11865";   //尝试这样加这些都可以这么加的
      

  18.   


    等你这句话等了很久啦。那顺便问下,被src的JS没接收这些参数呢?
    哈哈  是不是扯远啦。
      

  19.   

    把我的 Google 的后载入发来给你参考一下.// /* Google load */
    // // 加载 运程 Google js 脚本 
    // var headObj = $("head")[0];
    //
    // scriptObj = document.createElement("script");
    // scriptObj.language = "javascript";
    // scriptObj.type = "text/JavaScript";
    // scriptObj.src = "http://www.google-analytics.com/urchin.js";
    // // 加载完毕 触发 统计事件
    // scriptObj.onload=scriptObj.onreadystatechange=function(){
    // if(this.readyState && this.readyState == 'loading'){
    // return;
    // }else{
    // this.onsuccess();
    // }
    // };
    // scriptObj.onsuccess=function(){
    // urchinTracker();
    // };
    // headObj.appendChild(scriptObj);
    //
    // /* Google load */
      

  20.   

    讨论得很激烈么。
    我看到jsvm里面是先用xmlhttp取得js的内容,再用eval执行。效果不错呢。
      

  21.   

    完了,我用IE测试 可以 正常
    用Maxthon(遨游)测试 不行。