我正在使用WKWebView,我正在其中加载要显示的网页(反应)。但是我的didFinish触发得太早了。因此,当我的代表通知didFinish时,在加载实际数据之前,我只会看到白屏几秒钟。
这不起作用,导致白屏-在显示实际内容之前
class PowerControl(object):
def __init__(*args, **kwargs):
self.A = PowerControlA(*args, **kwargs) # maybe
# stuff
相反,我阅读了这篇文章,告诉我应该可以通过让网页在加载时通知Swift代码来实现。
https://medium.com/capital-one-developers/javascript-manipulation-on-ios-using-webkit-2b1115e7e405
我确实在Xcode项目中实现了以下代码
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
activityIndicator?.stopAnimating()
}
但是,现在我们在这里。我不知道该放在哪里,因为我的Web应用程序是用React编写的。
override func viewDidLoad() {
super.viewDidLoad()
let userContentController = WKUserContentController()
userContentController.add(self, name: "test")
}
extension DashboardViewController: WKScriptMessageHandler {
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "test", let messageBody = message.body as? String {
print(messageBody)
}
}
}
我的React组件
<script>
function printHelloWorld() {
window.webkit.messageHandlers.test.postMessage("Did finish loading");
}
window.onload = printHelloWorld;
</script>
谁能告诉我,如何在我的React组件中使用class Page extends React.Component<{ location, match }> {
public render() {
const content = (
<div className="row">
<p>Content</p>
</div>
);
return (
content
)
}
}
export default Page;
?
答案 0 :(得分:2)
尝试在组件挂载时调用该函数:
class Page extends React.Component<{ location, match }> {
componentDidMount() {
window.webkit.messageHandlers.test.postMessage("Did finish loading");
}
render() {
...
}
}
这是React组件的 onload 。
的更多信息