在基于Web的系统中,我维护最近上线的工作,它使Object元素在主网页中嵌入第二个网页.(实际上主网页包含菜单和标题,主应用程序页面在对象中)
例如
<object id="contentarea" standby="loading data, please wait..."
title="loading data, please wait..." width="100%" height="53%"
type="text/html" data="MainPage.aspx"></object>
Run Code Online (Sandbox Code Playgroud)
此应用程序的旧版本使用IFRAME执行此操作.我发现通过使用object标签,嵌入式Web页面的行为与先前在IFRAME中托管的行为不同.例如,在IE中,工具提示看起来不起作用(我将发布一个单独的问题!),看起来嵌入式页面无法访问脚本中的父页面,尽管它可以是IFRAME .
我被告知在IFRAME上支持对象标记的原因是IFRAME已被弃用,因此不能依赖于未来版本的浏览器.这是真的吗?是否最好在Iframe上使用Object标签来嵌入网页?或者很可能IFRAME将来会得到很好的支持(很久以后我老了,灰色,并且超过了我维护的应用程序的使用寿命)?
我的网页上有一个iframe.我通过javascript修改src属性,如下所示:
document.getElementById('myiframe').src = 'http://vimeo.com/videoid1';
document.getElementById('myiframe').src = 'http://vimeo.com/videoid2';
document.getElementById('myiframe').src = 'http://vimeo.com/videoid3';
Run Code Online (Sandbox Code Playgroud)
但是,每次我这样做,它都会记录在浏览器的历史记录中.因此,每次我在浏览器窗口中按下时,iframe内容都会从videoid3转到videoid2到videoid1.如果我再次按回,整个页面都会返回.
我想用javascript修改iframe src而不在浏览器的历史记录中记录一个条目.因此,如果我单击浏览器后退按钮,整个页面将返回而不更新iframe.
我尝试过这样的事情:
document.getElementById('myiframe').contentWindow.location.replace('http://vimeo.com/videoid1');
document.getElementById('myiframe').contentWindow.location.replace('http://vimeo.com/videoid2');
document.getElementById('myiframe').contentWindow.location.replace('http://vimeo.com/videoid3');
Run Code Online (Sandbox Code Playgroud)
虽然这使得浏览器后退按钮按照我想要的方式运行,但它打破了vimeo视频中的某些内容.Vimeo要求您通过iframe.src而不是contentWindow.location.replace()更改URL.
因此,如何在不登录历史记录的情况下修改iframe.src?
相关 这实际上是我正在探索解决主要问题的解决方案之一,我在这里发布 历史对象后退按钮与iframes
我们有一个使用Azure Active Directory“Easy Auth”的单页应用程序(SPA),例如无代码解决方案。当用户第一次打开应用程序时,这似乎工作正常。他们将被重定向到 Microsoft 登录页面,他们可以进行身份验证,然后访问应用程序。
然后,由于它是 SPA,用户将四处导航并仅触发 Ajax 请求。大约 24 小时后,当会话 cookie 过期时,问题就会出现。用户可能仍然打开相同的浏览器选项卡,并且不执行整个页面刷新。然后他们可能正在处理一条记录,并且在某个时候他们的下一个 Ajax PUT 请求失败并出现重定向 HTTP 状态,并且他们失去了工作。
所以他们的关键问题是:
我们如何使 SPA Ajax 请求扩展当前用户的会话,以便他们的会话在主动使用应用程序时不会过期?
Azure AD Easy Auth 服务似乎并不“尊重”用户的活动,这使我们相信会话 cookie 永远不会更新。
注意:我们最近使用 /.auth/refresh 端点进行了一些测试,但这也不能解决问题。