Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WebKit Page Cache下的pageshow 事件问题 #401

Open
77tb opened this issue Mar 6, 2020 · 1 comment
Open

WebKit Page Cache下的pageshow 事件问题 #401

77tb opened this issue Mar 6, 2020 · 1 comment

Comments

@77tb
Copy link

77tb commented Mar 6, 2020

iOS 13系统下App使用WKWebView展示网页。

现假设有两个页面foo.htmlbar.html,都引入了WebViewJavascriptBridge。其中,foo.html中有如下代码:

window.addEventListener("pageshow", myLoadHandler, false);

现进行这些操作:

  • 点击foo.html中的某个链接进入bar.html,然后WKWebView.goBack后退到foo.html
  • 重复上述操作几次

结果发现:

回退到foo.htmlmyLoadHandler 只在第一次被触发,之后几次都不会了

这个不符合 Apple的WebKit Page Cache(其他浏览器叫Back-Forward Cache、bfcache等)的正常行为(应该是每次都触发 pageshow)。

经过实验,可能是因为WebViewJavascriptBridgeinjectJavascriptFile注入js的时候WebViewJavascriptBridge_js方法中创建了一个隐藏的iframe引起:

messagingIframe = document.createElement('iframe');
messagingIframe.style.display = 'none';
messagingIframe.src = CUSTOM_PROTOCOL_SCHEME + '://' + QUEUE_HAS_MESSAGE;
document.documentElement.appendChild(messagingIframe);

不知道在现有设计下是否有解决方案?
或者是否考虑在 WKWebView 下使用 WKUserContentController.addScriptMessageHandler 来实现,从而绕开 iframe 的方案?

@housenkui
Copy link

我已经重构了这个库.
如果您遇到麻烦,可以尝试使用它.
下载地址:
https://github.com/housenkui/WebViewJavascriptBridge
它更轻,使用更简单. 10分钟之内应该可以完成接入.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants