WebView是Android提供的一个组件,用于在应用中嵌入网页内容。它基于Chromium引擎,允许应用显示网页内容而不需要打开外部浏览器。
默认情况下,WebView可能禁用JavaScript。
解决方案:
WebView webView = findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true); // 启用JavaScript
如果网页同时加载HTTP和HTTPS内容,Android可能会阻止JavaScript执行。
解决方案:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_MODE_COMPATIBILITY);
}
某些JavaScript功能(如alert())需要设置WebChromeClient。
解决方案:
webView.setWebChromeClient(new WebChromeClient());
WebView默认遵循同源策略,可能阻止跨域请求。
解决方案:
webSettings.setAllowUniversalAccessFromFileURLs(true);
webSettings.setAllowFileAccessFromFileURLs(true);
解决方案:
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); // 禁用缓存
解决方案:
webSettings.setDomStorageEnabled(true);
启用WebView调试:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
// 配置WebView设置
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setDatabaseEnabled(true);
webSettings.setAllowFileAccess(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_MODE_COMPATIBILITY);
}
// 设置WebChromeClient
webView.setWebChromeClient(new WebChromeClient());
// 设置WebViewClient
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 页面加载完成后可以执行JavaScript
}
});
// 加载网页
webView.loadUrl("https://example.com");
}
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
}
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
res/xml/network_security_config.xml
中配置:<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
然后在AndroidManifest.xml
中引用:
<application
...
android:networkSecurityConfig="@xml/network_security_config">
...
</application>
通过以上配置和检查,应该能解决大多数WebView中JavaScript不起作用的问题。
没有搜到相关的文章