gpt4 book ai didi

javascript - React 的 webkit.messageHandlers 将 JavaScript 注入(inject) Swift

转载 作者:搜寻专家 更新时间:2023-11-01 06:59:40 26 4
gpt4 key购买 nike

我正在使用 WKWebView,我正在加载要显示的网页 (React)。但是我的 didFinish 触发得太早了。因此,当我的代表通知 didFinish 时,在加载实际数据之前,我只会看到几秒钟的白屏。

This is not working, causes white screen - before showing actual content

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {  
activityIndicator?.stopAnimating()
}

相反,我读了这篇文章,告诉我应该可以通过让网页在加载时通​​知 Swift 代码来实现。

https://medium.com/capital-one-developers/javascript-manipulation-on-ios-using-webkit-2b1115e7e405

我确实在我的 Xcode 项目中实现了以下代码

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;

谁能告诉我,如何在我的 React 组件中使用 window.webkit.messageHandlers.test.postMessage

最佳答案

尝试在组件挂载时调用该函数:

class Page extends React.Component<{ location, match }> {

componentDidMount() {
window.webkit.messageHandlers.test.postMessage("Did finish loading");
}
render() {
...
}
}

它有点像 React 组件的onload

关于 componentdidmount 的更多信息

关于javascript - React 的 webkit.messageHandlers 将 JavaScript 注入(inject) Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51450360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com