js动态加载其他js文件后本页面数据刷新问题?

JavaScript013

js动态加载其他js文件后本页面数据刷新问题?,第1张

这种情况应该是time.js还没有加载完成就输出了GB,GB2。

动态创建的js因为是异步加载,所以可能没有完全加载,就往下执行。

应该需要保证加载完成后,再根据回调函数往下执行,就能保证输出是正确的。

html页面动态加载js文件脚本的方法。

1、直接document.write

<script language="javascript">

    document.write("<script src='test.js'><\/script>")

</script>

2、动态改变已有script的src 属性

<script src='' id="s1"></script>

<script language="javascript">

    s1.src="test.js"

</script>

3、动态创建 script元素

<script>

    var oHead = document.getElementsByTagName('HEAD').item(0)

    var oScript= document.createElement("script")

    oScript.type = "text/javascript"

    oScript.src="test.js"

    oHead.appendChild( oScript)

</script>

这三种方法都是异步的,所以在采用这类方法动态加载Js的同时,主界面的Js脚本是继续执行的,所以可能出现通过异步加载的Js代码得不到预期的效果的情况。

phantomjs 抓取js动态加载数据的方法:

phantomjs因为是无头浏览器可以跑js,用来进行网页抓取是再好不过了。

比如我们要批量抓取网页 “历史上的今天” 的内容。

第一行将会在终端打印出字符串,第二行 phantom.exit 将退出运行。

在该脚本中调用 phantom.exit 是非常重要的,否则 PhantomJS 将根本不会停 止。 pyspider 连上 PhantomJS 代理后,你就能通过在 self.crawl 添加 fetch_type='js' 的参数,开启使用 PhantomJS 抓取。