我试图弄清楚如何刷新页面上iFrame的内容。我在旧帖子上做了很多谷歌搜索和搜索,但是提供的所有解决方案都是将iFrame重新加载到初始src URL,而不是活动URL。
例如,我有一个iFrame,其中包含嵌入到我的主要网站中的Freshdesk客户门户。如果我在iFrame中单击几个不同的页面,那么我希望能够拦截页面刷新,而只是将iFrame刷新到活动页面。
当前行为: Freshdesk主页->知识库->新票证->刷新->返回首页
所需行为: Freshdesk主页->知识库->新票证->刷新->返回新票证屏幕(触发刷新之前,iFrame中访问的最后一页)
刷新不一定要通过f5刷新来触发,我可以在页面上使用内联按钮,但是需要将iFrame重新加载到上一次加载的页面上,而不是原始src URL。我尝试了以下代码,但每次都会刷新到Freshdesk的主页:
document.getElementById('iframeid').src = document.getElementById('iframeid').src
和
document.getElementById('some_frame_id').contentWindow.location.reload();
那么,如何在不重新启动到原始src URL的情况下刷新iFrame?
答案 0 :(得分:1)
您可以使用onbeforeunload
事件https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload来检测页面将要关闭或刷新。
因此,您可以将iframe的活动src和原始src进行比较,以了解用户是否导航到iframe内的某个页面。
然后选择您喜欢的消息传递系统,以确保门户网站有一种方法可以在再次加载后知道该src:url参数,本地存储,cookie等等...
答案 1 :(得分:0)
在Shilly的帮助下和一些头脑风暴,我找到了解决我的问题的方法,并将其发布在这里给我所遇到的其他任何人。事实证明,Freshdesk(iframe中的网站)允许您使用自定义javascript。使用此功能,我想到了以下内容:
1)在第一页加载时使用parent.postMessage将当前活动页面的URL发送到我的主要网站。
2)使用sessionStorage在我的网站上存储当前Freshdesk页面的URL
3)在我的主要网站的首页加载中,检查是否设置了sessionStorage值,如果已设置,则将iFrame的src设置为此值。
这不是一个真正的“仅刷新”解决方案,但是它确实使访问的最后一个iFrame页面在用户会话的其余部分中都保持不变,这意味着如果暂时刷新或导航,他们将不会失去位置。由于使用了sessionStorage,这也将在用户关闭页面时重新设置,这意味着下次访问时,他们将在Freshdesk主页(或您在iFrame中托管的任何其他网站)上重新启动。