今天解决了一个困扰我们很久的一个问题(说是很久,但一直没有花时间去research,想想不影响功能使用,没什么啊。而真正解决问题,也就那二十来分钟,哎!人已经懒惰成这样了)。
问题描述:
我们利用ajax做了一套系统,但通过https访问的时候,IE总会弹出下面的对话框:

而在我们的代码中所有的访问都是通过https的,怎么会有不安全的元素呢?在网上google了一下,有人提到可能是iframe的问题。而在我们系统中确实用到了很多的iframe。修改code,去掉所有的iframe。再次run,上面的对话框没有了,终于找到原因了。但是我们的系统中是需要iframe啊?请看下面的code:

1var iframe=document.createElement("iframe");
2        iframe.style.zIndex=-1;
3        iframe.style.position="absolute";
4        iframe.style.left=0;
5        iframe.style.top=0;
6        iframe.style.width=menu.getSize().x-2;
7        iframe.style.height=menu.getSize().y-4;
8        menu.getHtmlElement().appendChild(iframe);

从上面的code,可以看出代码中没有指定src属性,这样IE是没有办法知道这个iframe将引用的是安全内容还是不安全内容呢。所以会弹出上面的对话框。增加src属性,修改code:

var iframe=document.createElement("<iframe src='blank.html'>");//src是个只读属性,不能直接赋值,black.html是个空的静态页面。

再次run,对话框没有了,问题解决。

附录:

在IE下,如果div悬浮在select上面。select会透过div显示出来。这非常影响视觉效果。网上有很多的解决办法,其中一个就是在div中增加iframe。我们就是通过这个方法的,但又产生了这个问题。