JavaScript警报在Android WebView中不起作用
在我的应用程序中,我使用的是JavaScript警报在Android WebView中不起作用,javascript,android,Javascript,Android,在我的应用程序中,我使用的是WebView,我使用的是JavaScript-alert()方法,但它不起作用,不会出现弹出窗口 在我的清单文件中,我添加了 <uses-permission android:name="android.permission.INTERNET"></uses-permission> mWebView = (WebView) findViewById(R.id.webview); mWebView.getSettings().setJavaS
WebView
,我使用的是JavaScript-alert()
方法,但它不起作用,不会出现弹出窗口
在我的清单文件中,我添加了
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("file:///android_asset/demo.html");
在布局xml文件中,我添加了
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
如何在WebView
中启用完整的JavaScript
更新
WebView wb_previewSurvey=new WebView(this);
wb_previewSurvey.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
//Required functionality here
return super.onJsAlert(view, url, message, result);
}
});
谢谢马克html
文件中的alert()
方法现在正在工作:)
现在在WebView
中有两个问题:1:我正在加载到
WebView
的html文件中使用
,并尝试在其中使用印地语字体书写,但当我尝试书写印地语文本时,它会显示为符号(矩形符号,如[])
当我在桌面上的firefox浏览器中执行同样的操作时,效果很好。
如何在WebView
的textarea
中支持多种语言
2:当我单击submit并试图在另一个java脚本中打开alert()
方法中的文本值时,它不起作用,这是否意味着即使在使用WebChromeClient
它只适用于当前加载的html页面,而不适用于从该页面调用的
javascripts
检查链接和最后一条评论,您必须使用WebChromeClient
。以下代码将起作用:
private WebView mWebView;
final Activity activity = this;
// private Button b;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
activity.setProgress(progress * 1000);
}
});
mWebView.loadUrl("file:///android_asset/raw/NewFile1.html");
}
正如其他人所指出的,需要设置WebChromeClient才能使
alert()
正常工作。只需设置默认WebChromeClient()即可:
mWebView.getSettings().setJavaScriptEnabled(true);
setWebChromeClient(新的WebChromeClient());
谢谢你的评论。包括John Smith,他指出您需要启用JavaScript。您可以试试这个,它对我很有效
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
return super.onJsAlert(view, url, message, result);
}
});
WebView wb_previewSurvey=new WebView(this);
wb_previewSurvey.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
//Required functionality here
return super.onJsAlert(view, url, message, result);
}
});
如果您希望对用户隐藏URL,请显示一个AlertDialog,如下所示
myWebView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.d(TAG, "onJsAlert url: " + url + "; message: " + message);
AlertDialog.Builder builder = new AlertDialog.Builder(
mContext);
builder.setMessage(message)
.setNeutralButton("OK", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int arg1) {
dialog.dismiss();
}
}).show();
result.cancel();
return true;
}
}
这是“JavaScript”,而不是“Java脚本”、“Java脚本”或“Java脚本”(所有这些都出现在您最初的问题中)。我已经为您更正了。@T.J.Crowder我敢说它应该被称为Javascript。@kriselbek:no.:-)“JavaScript”是Oracle的注册商标(Total love兼并和收购),并(经许可)用于其实现。在这两种情况下,大写字母S是该名称唯一的规范形式。当然,该语言的另一个名称是ECMAScript(或ES),但除了在谈论时,没有人真正使用它。谢谢!webView.setWebChromeClient(新的WebChromeClient(){@Override public boolean onJsAlert(webView视图,字符串url,字符串消息,JsResult结果){返回super.onJsAlert(视图,url,消息,结果);});你的评论对我有帮助。。正如下面尼希尔的回答一样,它很有魅力。但是。。。。WebClient是否比WebChromeClient有任何优势。这可能是一个愚蠢的问题,但无论如何:为什么要重写一个方法,只调用具有相同参数的super方法?不要忘记添加
webview.getSettings().setJavaScriptEnabled(true)
yes,但大多数情况下,您都希望调整WebChromeClient的事件,因此…我最终通过添加mWebView.getSettings().setJavaScriptEnabled(true)使其工作代码>行mWebView.setWebChromeClient(新WebChromeClient())之前代码>别忘了添加webview.getSettings().setJavaScriptEnabled(true)
这非常有效,但是当我从javascript调用提示符
而不是显示提示符文本时,它会说,“页面在https://... 说:“完全打破了应用程序中嵌入的WebView的沉浸感