我正在使用PHP和Javascript在网站上实施第三方2fa解决方案(Duo Web) 我有它在所有浏览器上工作,但IE8 通过初始登录屏幕后,加载2fa登录页面,应该具有2fa提示的iframe为空。
在阅读了一些线程后,似乎ie8中iframe的正常解决方案是从嵌入页面移除相对位置或将其交给iframe。
由于我无法访问该页面,因此我在框架中添加了相对定位无效。这是奇怪的部分,这只发生在您第一次访问2fa页面时。
重新加载页面会正确显示iframe。代码似乎也存在。 Duo中有一个选项可以在到达2fa页面时自动发送登录请求。启用此选项后,请求将显示在Duo应用程序中,即使iframe为空,您也可以正确登录。
所以看起来代码有效,iframe只是空白。同样,这仅在第一次访问页面时发生。之后,iframe会正确显示,直到浏览器关闭并重新打开。
由于这与工作相关,我无法显示确切的代码,但它基本上是
<div id="iframe_container" style="text-align:center;width:100%;">
<iframe id="duo_iframe" frameborder="0">Loading...</iframe>
// this form passes data along when response comes back
<form method="POST" id="duo_form">
<input type="hidden"/>
<input type="checkbox"/><label for="checkbox"><small>Remember this device</small></label>
</form>
// form to log user out and send them back to normal login page
<form method="GET" action="url">
<input type="hidden" />
<input type="hidden" />
<input type="submit" id="submit" value="Go Back">
</form>
</div>
CSS如下
#duo_iframe
{
width: 100%;
min-width: 304px;
max-width: 620px;
height: 330px;
background: transparent;
position: relative;
display: block;
margin-left: auto;
margin-right: auto;
}
我在兼容模式下运行,但禁用它无法解决问题。任何想法都将不胜感激。
答案 0 :(得分:0)
原来是竞争条件。当第一次加载嵌入页面时,它的初始化Javascript在元素可用之前被触发。刷新主页时,嵌入的内容将被缓存,因此在js触发之前加载。添加一个在几秒钟后调用init函数的超时可以解决问题。