在业务里用到了PHP header导出doc文档,GET传值到页面,读出相应数据输出doc文件下载。用户提出需要批量,于是设计成js循环出对应数量的window.open(),向页面传入不同的值,批量输出相应的文件。简单的说,就是我需要循环出多个window.open()。

js代码为:

var outCode = JSON.parse(<?php echo $jsonCode; ?>);
for(var i=0; i<outCode.length; i++){
$statu = $("开始导出"+outCode[i]+"号申请表..").appendTo("body");
window.open("../docout.php?id="+outCode[i]);
$statu.append("已弹出下载,请注意");
}

(PHP页面省略)

实际过程中,在IE8上却出现了若干问题。花费不少时间。下面列举每个遇到的问题(均为IE8下,其他环境均不存在问题。吐)。

1、首先是单个的需要打开的是利用PHP header输出doc的页面,发现在使用<a href="url.php?id=code">链接形式传递时,新窗口正常打开并输出文件提示下载,没有问题。而改用window.open()打开却只有空白页面。

上网查找了一下解决方法:把IE个性化设置重置为默认(工具-Internet选项-高级-重置),删除所有个性化设置,完成后,重试IE该问题不再出现,窗口能正常打开。但是还有另外的问题:弹出窗后下载报错,下载框弹出提示"无法打开该站点,请求的站点不可用"...

查找解决方法后发现是IE8的缓存BUG,需要加补丁。或在PHP输出中更改缓存模式。

加入header语句后问题解决。

header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
java的写法:
response.setHeader("Cache-Control", "must-revalidate");
response.setHeader("Cache-Control", "post-check=0");
response.setHeader("Cache-Control", "pre-check=0");

2、多个window.open弹出的问题单个的解决了,在批量循环弹出多个窗口打开页面时,IE8出现了这样的现象:循环开始,从打开第一个窗以后(默认在选项卡里打开),每次打开均把前一次的窗关闭又打开,一直重复,都只能出一个窗,也无法输出内容。怀疑是多个window.open只能出在一个窗上。

查阅资料,window.open的参数包括(url,name,feature,replace):

url:窗口链接,声明要在新窗口中显示的文档的 URLname:新窗口的名称。如果指定了一个已经存在的窗口,就不再创建一个新窗口,而只是返回对指定窗口的引用。feature:样式定制,例如高宽、滚动条等replace:url条目在历史记录里的生成方式,true替换浏览历史中的当前条目,false在浏览历史中创建新的条目

于是把每个窗口name赋予不同的名称,并将replace赋值为false,问题依然未能解决。

上了stack overflow,找到了一些相关问题,有所发现:首先提到name属性的标准解释,除了赋为自定义String,还有_blank _parent _self _top 。详细如下:

查看: msdn关于window.open()的解释

于是将name改为"_blank"。

window.open("../docout.php?id="+outCode[i],"_blank","",false);

问题解决,每个window.open都在新的窗口打开了。但是烦人的问题没有结束。。

3、这回真是折磨透了。。上传到服务器后仍然出现之前的问题。怎么改属性都也不起作用。折磨了一天,找到了问题所在:

(尝试过程省略一万字)

在本地时,IE8中本地站点安全性配置为中低,而internet默认级别为中高。于是尝试将站点加入可信站点内,并配置同样的中低安全性。问题解决了。。。估计是安全性配置中的防弹窗的问题。

配置方法:internet选项——安全——可信站点——添加,并将安全性设为中低

在自定义级别中应该也能找到相应的选项,应该是禁用防弹窗,没试了。

到此,这个问题发现已经无法用代码去绕开了。只能记住下次不再用这方法实现任何功能。存在差异性。(其实都是IE...)

4、另外关于name在IE8的问题——拒绝空格和中划线
解答中其次提到,在name中,IE8不支持Space(空格)、dash(中划线-),如果在name中使用形如"my-window"或"my window",将会报错 Invalid argument。
吐槽:IE为什么不去见鬼。

参看stack overflow上相关问题:

ie8 var w= window.open() - “Message: Invalid argument.

Window.open not working in IE8?

本文也发表在我的独立博客blog.mc-zone.me上,点击 访问此文

window.open下载文件ie8请求的站点不可用的解决办法的更多相关文章

  1. ie无法下载 无法打开该internet站点.请求的站点不可用或无法找到.请稍后重试

    PK找的: http://support.microsoft.com/kb/316431/ 症状 ... 如果服务器使用着安全套接字层 (SSL) 并且已将下面的两个 HTTP 标头或其中的一个添加到 ...

  2. 【VS调试】C#读写Windows 7注册表时抛出“不允许所请求的注册表访问权”的解决办法

    原文:[VS调试]C#读写Windows 7注册表时抛出"不允许所请求的注册表访问权"的解决办法 项目 - 属性 - 安全性,"使用ClickOnce",修改a ...

  3. (转)Maven依赖的jar包下载不了、jar更新不了的解决办法

    场景一: 使用Maven的同学可能偶尔会遇到这种情况:pom.xml中依赖了项目需要的某个jar文件,但是使用Maven –> update project 还是没办法下载该jar到项目中,你可 ...

  4. SCR文件的关联被AutoCAD所取代的解决办法

    SCR文件的关联被AutoCAD所取代的解决办法 --------转载自:http://hi.baidu.com/ygq366/item/45dceee3df47d2b52e140be9 SCR文件的 ...

  5. Linux的desktop文件正常编写赋权,仍无法打开解决办法

    Linux的desktop文件正常编写赋权,仍无法打开解决办法 如果你像我一样遇到了这个问题, 明明都没有问题, desktop文件不显示图标, 双击打开是文本编辑器, 同时也有执行权限 打开却是这样 ...

  6. VMWare虚拟机->锁定文件失败,打不开磁盘的解决办法

    VMWare虚拟机提示:锁定文件失败,打不开磁盘的解决办法   如果使用VMWare虚拟机的时候突然系统崩溃蓝屏,有一定几率会导致无法启动,会提示:“锁定文件失败,打不开磁盘...或它所依赖的某个快照 ...

  7. Linux进阶之VMware Linux虚拟机运行提示“锁定文件失败 虚拟机开启模块snapshot失败”的解决办法

    问题1:VMware Linux虚拟机运行提示"锁定文件失败 虚拟机开启模块snapshot失败"的解决办法 非正常关闭虚拟机(例如开关机过程中关掉VMware等操作),再次启动虚 ...

  8. npm下载包很慢和node-sass编译错误的解决办法

    最近研究一个ionic cordova angular2的前端项目 发现npm install下载包非常慢的问题 最近整理了一些解决这些问题的方法. 1.通过config命令修改https为http ...

  9. SpringCloud+Feign环境下文件上传与form-data同时存在的解决办法(2)

    书接上文. 上文中描述了如何在 SpringCloud+Feign环境下上传文件与form-data同时存在的解决办法,实践证明基本可行,但却会引入其他问题. 主要导致的后果是: 1. 无法与普通Fe ...

随机推荐

  1. Apache是目前应用最广的Web服务器,PHP3是一种类似ASP的脚本语言

    一.如何获得软件? 获得这3个软件包的方法很多,目前大多数Linux分发都捆绑了这3个软件包,如RedHat.本文介绍的安装方法是基于从这些软件的官方站点上下载获得的软件包进行的,针对RedHat L ...

  2. SDR和DDR1/2/3全系列频率对照表

  3. HDU 2087 kmp模板题

    s为主串 t为模板串 求t的nextt 加const #include<stdio.h> #include<string.h> #include<algorithm> ...

  4. PHP 多个文件上传

    关键函数: is_uploaded_file():用于判断指定的文件是否是通过 HTTP POST 上传的,如果是则返回 TRUE.用于防止潜在的攻击者对原本不能通过脚本交互的文件进行非法管理,这可以 ...

  5. 【翻译】CEDEC2013 BANDAI NAMCO 了解游戏格斗动画中的身体运动结构和原理

    CEDEC搬运工程开始~   这篇会议PPT的作者 元梅幸司曾经就职在TECMO参与开发了死或生2,3[ DEAD OR ALIVE],忍龙「NINJA GAIDEN」后来加入NAMCO(现在是BAN ...

  6. 【翻译】Kinect v2程序设计(C++) Depth编

    Kinect SDK v2预览版,取得Depth数据的方法说明. 上一节,介绍了通过使用Kinect for Windows SDK v2预览版(以下简称为,Kinect SDK v2预览版)从Kin ...

  7. IS_POST:判断是否存在POST提交

    IS_POST:判断是否存在POST提交 在程序中可以使用IS_POST来做优化..如果有提交.我们再执行下一步动作.节省开销

  8. [SHELL进阶] (转)最牛B的 Linux Shell 命令 (三)

    1. 更友好的显示当前挂载的文件系统 mount | column -t 这条命令适用于任何文件系统,column 用于把输出结果进行列表格式化操作,这里最主要的目的是让大家熟悉一下 columnt ...

  9. MySQL存储引擎总结

    MySQL存储引擎总结 作者:果冻想 字体:[增加 减小] 类型:转载   这篇文章主要介绍了MySQL存储引擎总结,本文讲解了什么是存储引擎.MyISAM.InnoDB.MEMORY.MERGE等内 ...

  10. java语言中数值自动转换的优先顺序

    转换原则:从低精度向高精度转换byte .short.int.long.float.double.char数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用 ...