Android - Webview 元素 onClick 事件未触发?
Posted
技术标签:
【中文标题】Android - Webview 元素 onClick 事件未触发?【英文标题】:Android - Webview Element onClick event is not triggering? 【发布时间】:2017-04-12 11:38:58 【问题描述】:在 Webview 中,我正在加载本地 index.html 文件并使用 javascript 从远程将 HTML 内容添加到 Webview。 当用户单击 Webview 包含的元素时,我想执行一些任务,例如显示工具提示、警告框。 P.S 听起来它有非常直接的解决方案。但我可以这样做! 谢谢!
【问题讨论】:
【参考方案1】:将 WebView 添加到您的应用程序
<?xml version="1.0" encoding="utf-8"?>
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview"
android:layout_
android:layout_
/>
在 JAVA 中加载 URL
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl("http://www.example.com");
添加 INTERNET 权限
<manifest ... >
<uses-permission android:name="android.permission.INTERNET" />
...
在网页视图中启用javascript
WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
制作界面
public class WebAppInterface
Context mContext;
/** Instantiate the interface and set the context */
WebAppInterface(Context c)
mContext = c;
/** Show a toast from the web page */
@JavascriptInterface
public void showToast(String toast)
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
您可以使用 addJavascriptInterface() 将此类绑定到在您的 WebView 中运行的 JavaScript,并将接口命名为 Android。例如:
WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new WebAppInterface(this), "android");
在您的 HTML 中
<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />
<script type="text/javascript">
function showAndroidToast(toast)
Android.showToast(toast);
</script>
希望对你有帮助
来源https://developer.android.com/guide/webapps/webview.html#AddingWebView
【讨论】:
我不需要界面,因为工具提示和警报以 HTML 而非 Andorid 原生显示。【参考方案2】:shouldOverrideUrlLoading
例如
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
if(url!= && url.endWith("your_url.html"))
//your tootip, alertIDialog, etc.
// return true to report that we have intercepted the event
return true;
return super.shouldOverrideUrlLoading(view, url);
https://developer.android.com/reference/android/webkit/WebViewClient.html#shouldOverrideUrlLoading(android.webkit.WebView, android.webkit.WebResourceRequest)
【讨论】:
以上是关于Android - Webview 元素 onClick 事件未触发?的主要内容,如果未能解决你的问题,请参考以下文章
Espresso Android,点击 WebView 元素错误
无法从 android 应用程序的 webview 检查元素
Android - 检查元素是不是存在于 WebView 中(在 DOM 中)
Android Cordova:使 WebView HTML 元素透明以查看原生元素