之前尝试着用了htmlunit爬取了js执行之后的页面,后来又遇到了一个大坑。
需求是,后台在使用htmlunit访问对应页面,在页面使用IE的OBJECT组件完成数据和模板的组装后返回特迷案在本地生成HTML文件,其中模板和数据都是在使用htmlunit时作为参数传入页面的。
组件代码
<OBJECT id="preview"
classid="clsid:DD890748-A582-4716-AEFA-1658B3849045"
codebase="js/tools/ThundPrintOcx.cab" width=1000px height=800px
align=center hspace=0 vspace=0> </OBJECT>
在JS中使用VIEW方法组装
var preview = document.getElementById("preview");
preview.View(data,templateContent)
期间一直碰到组装不成功或者组装出来的东西缺少内容。而把数据和模板直接写在页面的JS中直接使用不出问题。后来发现是因为引号的问题……
即:后台传参数过来之后,我在前端是从request中去取数据的,取出来的数据是在引号之内的字符串,因为这个关系,原本的双引号变成了单引号导致出现问题。百度之后找到了解决方案:
emplateContent = templateContent.replace(/'/g, '"')
使用表达式将单引号替换为双引号即可。
希望能解决碰到过同样问题的同学的困惑