WebView是一种嵌入式浏览器组件,允许在原生应用中显示网页内容。在移动应用开发中,WebView常用于加载本地HTML文件或远程网页,并与之交互。
// 加载本地HTML文件
webView.loadUrl("file:///android_asset/your_file.html");
// 设置WebView支持JavaScript
webView.getSettings().setJavaScriptEnabled(true);
// 在页面加载完成后执行JavaScript
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 执行JavaScript代码
view.evaluateJavascript("javascript:yourFunction()", null);
}
});
// 加载本地HTML文件
if let htmlPath = Bundle.main.path(forResource: "your_file", ofType: "html") {
let url = URL(fileURLWithPath: htmlPath)
webView.loadFileURL(url, allowingReadAccessTo: url)
}
// 在页面加载完成后执行JavaScript
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("yourFunction()") { (result, error) in
if let error = error {
print("JavaScript执行错误: \(error.localizedDescription)")
}
}
}
原因:
解决方案:
onPageFinished
或didFinish
回调中执行原因:加载本地HTML时访问远程资源可能受同源策略限制
解决方案:
file://
协议加载本地资源原因:复杂JavaScript操作可能阻塞UI线程
解决方案:
Android:
// 注册Java对象供JavaScript调用
webView.addJavascriptInterface(new MyJavaScriptInterface(), "Android");
// 定义接口类
public class MyJavaScriptInterface {
@JavascriptInterface
public void showToast(String message) {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
}
iOS:
// 创建消息处理器
let contentController = WKUserContentController()
contentController.add(self, name: "nativeHandler")
// 实现WKScriptMessageHandler协议
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "nativeHandler" {
// 处理来自JavaScript的消息
}
}
通过以上方法,开发者可以灵活地在WebView中加载HTML并执行JavaScript,实现丰富的混合应用功能。
没有搜到相关的文章