比如说有几个页面1 a.html a.html需要调用b.js
用此种方法来调用
<script language="javascript" src="b.js"></script>2. b.js 里面需要调用外站的一个javascript,这个函数不能修改,不能直接考到b.js中这里来如何调用 c.js3.c.js 为外站的一个js代码,utf-8编码(编码不是问题),不能直接考备问题是 b.js如何动态调用 c.js,并且在b.js中执行c.js中定议的函数动态创建的方式都试了不行,
第1种方法
var elScript = document.createElement('script');
elScript.src = url;
document.body.appendChild(elScript);第2种方法document.write('<script language=...')这两种方方法都试了,虽然可以加载c.js ,但不能在b.js 中来控制c.js中的函数不知道大家看懂了没有
用此种方法来调用
<script language="javascript" src="b.js"></script>2. b.js 里面需要调用外站的一个javascript,这个函数不能修改,不能直接考到b.js中这里来如何调用 c.js3.c.js 为外站的一个js代码,utf-8编码(编码不是问题),不能直接考备问题是 b.js如何动态调用 c.js,并且在b.js中执行c.js中定议的函数动态创建的方式都试了不行,
第1种方法
var elScript = document.createElement('script');
elScript.src = url;
document.body.appendChild(elScript);第2种方法document.write('<script language=...')这两种方方法都试了,虽然可以加载c.js ,但不能在b.js 中来控制c.js中的函数不知道大家看懂了没有
您是要调用c.js的方法,还是要动态修改c.js里的方法
/*
这里直接调用c.js的方法
*/
</script>理论上将能加载的js文件都可以调用其方法的
c("call")
</script><script src="c.js">
var c = function(){}
</script>也就是说 你在b文件里。调用c 文件的一些方法。而这个方法还没被赋值。因为调用在赋值之前
elScript.src = url;//document.body.appendChild(elScript);
document.body.insertBefore(elScript, document.getElementsByTagName("script")[0]);
var elScript = document.createElement('script');
elScript.src = url;//document.body.appendChild(elScript);
//document.body.insertBefore(elScript, document.getElementsByTagName("script")[0]); //sorry
这种语法是没有问题的大家可以在本机上写简单的语句调式下 c.js可以用最简单的方法来测试下,用本机的地址就行,比如function test(){}这样也是出错的别外 c.js不是固定的JS文件,是通过程序动态生成的js,不能直接复制,必须远程调用
<script language="javascript" src="b.js"></script>
</body>c.js
function test(){
alert("ok?")
}b.js 由于b是js文件不能用<script src="c.js">这样的写法
我想在b.js中调用 c.js 并且在b.js代码中执行c.js的 test()函数不知道 能不能使现
<script language="javascript" src="b.js"></script>确保先载入C后载入B,就能在B里调用C的函数了。
<script language="javascript" src="c.js"></script>
首先不是在body上添加,应该是往head上加
var head = document.getElementsByTagName('head')[0];不知你是怎么调用c里面函数的
是在
document.body.appendChild(elScript);
之后马上调用c里的函数吗? 这样的话因为这是一个异步过程所以调用会失败, 期间浏览器还在发请求拿c.js内容,等拿到时会有一个 elScript.onreadystatechange 回调(貌似叫这个), 可以调用c里函数的代码写在这个回调中
另一种方法是前台发送请求到后台,由后台拿c.js内容content返回给前台,前台
var elScript = document.createElement('script');
elScript.text = content;//这是个同步的过程
document.body.appendChild(elScript);
callFunctionInC()
所谓解释型语言,就是代码在执行时才被解释器一行行动态编译和执行,而不是在执行之前就完成编译。简单说,解释型语言就是边编译边执行,你要确保你在b中开始调用C方式的时候,此时的c已经被动态地编译和执行了。才可以。所以你要控制好知性顺序应该没问题
方法我找到了,是跟面序有关系,并且还得判断是什么事件
if (navigator.userAgent.indexOf("IE") >= 0)
elScript.onreadystatechange = function()
{结贴
---------
其实你问的问题不准确,如何动态创建引用SCRIPT元素,你是知道的.只是这里对外部的JS存在一个下载过程.如果下载过程不是特别快,紧接着的调用就会出错.
所以,问题是如何在等到外部JS加载了之后再调用其中的方法.
这个,可以用AJAX解决,在接收数据完毕之后的事件里进行调用即可.