JavaScript 警报在 Android WebView 中不起作用
Posted
技术标签:
【中文标题】JavaScript 警报在 Android WebView 中不起作用【英文标题】:JavaScript alert not working in Android WebView 【发布时间】:2011-07-13 09:58:08 【问题描述】:在我的应用程序中,我使用的是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_
android:layout_
/>
任何线索如何在WebView
中启用完整的JavaScript
?
更新
谢谢马克html
文件中的 alert()
方法现在可以工作了:)。
现在WebView
有两个问题:
1:我在我正在加载的 html 文件中使用 <textarea>
WebView
,并尝试在其中写入印地语字体,但是当我尝试编写印地语文本时,它显示为符号(矩形符号,如 [ ] ) .
当我在桌面上的 Firefox 浏览器中执行相同操作时,它工作正常。
任何线索如何在WebView
中为textarea
中的多种语言提供支持?
2:当我单击提交并尝试在另一个 java 脚本中打开 alert()
方法中的文本值时,它不起作用,这是否意味着即使使用了 WebChromeClient
它仅适用于当前加载的 html 页面,而不适用于从该页面调用的javascripts
?
【问题讨论】:
它是“JavaScript”,而不是“Java Script”、“java-script”或“Java script”(所有这些都出现在您的原始问题中)。我已经为你更正了。 @T.J.Crowder 我敢说它应该被称为 Javascript。 @KrisSelbekk:不。 :-) "JavaScript" 是 Oracle 的注册商标(必须热爱并购),并使用(经许可)by Mozilla 用于其实施。在这两种情况下, 都是大写的 S。这是该名称的唯一规范形式。当然,该语言的另一个名称是 ECMAScript(或 ES),但除了在谈论 ES5 时,没有人真正使用它。 【参考方案1】:正如其他人指出的那样,需要设置 WebChromeClient 才能使alert()
工作。只需设置默认的 WebChromeClient() 就足够了:
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebChromeClient(new WebChromeClient());
感谢以下所有 cmets。包括表示您需要启用 JavaScript 的 John Smith。
【讨论】:
是的,但大多数时候你想调整 WebChromeClient 的事件,所以...... 我终于设法通过在mWebView.setWebChromeClient(new WebChromeClient());
行前添加mWebView.getSettings().setJavaScriptEnabled(true);
使其工作
别忘了加webview.getSettings().setJavaScriptEnabled(true);
【参考方案2】:
检查this链接,最后评论,你必须使用WebChromeClient
来达到你的目的。
【讨论】:
谢谢! webView.setWebChromeClient(new WebChromeClient() @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) return super.onJsAlert(view, url, message, result); ); 你的评论对我有帮助.. 就像下面 Nikhil 的回答一样。 像魅力一样工作。但是然后.... WebClient 是否比 WebChromeClient 有任何优势。 这可能是一个愚蠢的问题,但无论如何:为什么要重写一个方法只调用具有相同参数的超级方法? 别忘了加webview.getSettings().setJavaScriptEnabled(true);
【参考方案3】:
webView.setWebChromeClient(new WebChromeClient()
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result)
return super.onJsAlert(view, url, message, result);
);
【讨论】:
这很好用,但是当我从 javascript 调用prompt
时,它没有显示提示文本,而是显示“https://...的页面说:”完全打破了沉浸式嵌入在应用中的 WebView【参考方案4】:
以下代码将起作用:
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");
【讨论】:
【参考方案5】:你可以试试这个,它对我有用
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);
);
【讨论】:
【参考方案6】:如果您希望对用户隐藏 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 警报在 Android WebView 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Javascript 警报弹出在 IOS 中无法用于 phonegap