window.open遇到的问题的详细解说

需求如下:

   在一个WEB系统中,主页面index.jsp包含了head.jsp   left.jsp   document.jsp等等,现在需要在document.jsp 上有一个按钮,点击他的时候就弹出新页面将这个页面 document.jsp预览出来,并增加打印和取消两个按钮。

 

我刚做这个的时候,先从网上找了一大堆东西,比如

var newwin=window.open(window.location.href); 这一句就已经把document.jsp的内容完全写入到新页面,包括样式,我没有新建文件了

newwin.document.write("<script>..............");

newwin.document.write("<input .......>");我加上这些需求之后,原来的页面就没了。不管加什么 原来的就没有了,并且这种方法不好,因为我要打印的不是document.jsp的全部,因此这样的方法或许可行,但是很快被我抛弃。。就算用了newwin.document.write("<script 隐藏不需要的>");也毫无意义

 

我改成新建一个JSP页面的方法。

 新建一个printBody.jsp的页面,给他添加两个按钮

   function printPage(){
    var bp = document.getElementById("btPrint");
    var bc = document.getElementById("btCancel");
    if(bp!=undefined&&bc!=undefined)
    {
     bp.style.display = "none";// 将该打印按钮在点击的时候设置隐藏
     bc.style.display = "none";//取消按钮隐藏
    }
    window.print();//打印页面
   }

<input type="button" value="打印" size="6" οnclick="printPage()" id="btPrint">

<input type="button" value="取消" size="6" οnclick="window.close();" id="btCancel">

 

给printBody.jsp一个DIV  这个DIV用来接收document.jsp需要传过来的内容

<div id="printBody"></div>

 

→  当点击document.jsp中的打印时,调用window.open("printBody.jsp");

      打开之后,将document.jsp的内容赋给printBody.jsp

  var printBody=document.getElementById("printBody");//拿到printBody.jsp的那个DIV
  if(undefined==printBody){//需要对这个DIV判断是否存在
   alert("出错了");
   return false;
  }
  var nowdiv=window.opener.document.all("showTabBody");//因为是由document.jsp进入printBody.jsp,所以document.jsp被称为opener
  if(undefined==nowdiv){//对document.jsp中的DIV进行判断,不存在则返回
   return false;
  }
  printBody.innerHTML=nowdiv.innerHTML;//将document.jsp中的内容放到printBody.jsp中

 

这里遇到了一个严重的问题,因为页面加载的过程中,是从上到下的,如果有JS就先JS,然后CSS,JAVA代码,最后才是HTML静态页面,但是很多时候是JS用到了静态页面中的元素,所以就会造成未定义的情况。

window.open()方法是一个异步的方法,他在执行了这个方法之后,立刻就执行下一句代码了,不会等这HTML页面加载完毕,所以就造成了未定义的情况。

所以我们一般是使用延迟加载事件 onload() 

但是onload()方法如果不写在加载的HTML页面的话,IE就不支持了,火狐支持,我朋友测试过了

 

→ 将蓝色的代码写在printBody.jsp中就可以了  但是要加上 window.οnlοad=function(){ 蓝色代码 }

opener:由A页面打开到B页面,那么A页面就是opener  

另外 var newwin=window.open("a.jsp");  那么newwin代表a.jsp  newwin.document.getElementById("id")就可以取东西了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值