JavaScript 警报在 Android WebView 中不起作用

IT技术 javascript android
2021-02-01 19:31:42

在我正在使用的应用程序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"
/>

任何线索如何启用全JavaScriptWebView


更新

感谢标记文件中
alert()方法html现在正在工作:)。

现在有两个问题WebView
1:我<textarea>在加载的 html 文件中使用 a WebView,并尝试在其中使用印地语字体书写,但是当我尝试书写印地语文本时,它显示为符号(矩形符号,如[])。

当我在桌面上的 Firefox 浏览器中执行相同操作时,它工作正常。任何线索如何在textareain 中支持多种语言WebView

2:当我单击提交并尝试alert()在另一个 java 脚本中打开方法中的文本值时,它不起作用,这是否意味着即使在WebChromeClient 仅适用于当前加载的 html 页面而不是javascripts从该页面调用之后?

6个回答

正如其他人指出的那样,需要设置 WebChromeClient 才能alert()开始工作。只需设置默认的 WebChromeClient() 就足够了:

mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebChromeClient(new WebChromeClient());

感谢下面的所有评论。包括 John Smith,他表示您需要启用 JavaScript。

我终于通过mWebView.getSettings().setJavaScriptEnabled(true);在行前添加来让它工作 mWebView.setWebChromeClient(new WebChromeClient());
2021-03-15 19:31:42
是的,但大多数时候你想用 WebChromeClient 的事件进行调整,所以......
2021-03-25 19:31:42
不要忘记添加 webview.getSettings().setJavaScriptEnabled(true);
2021-03-28 19:31:42

检查这个链接,最后一条评论,你必须WebChromeClient为你的目的使用

谢谢!webView.setWebChromeClient(new WebChromeClient() { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return super.onJsAlert(view, url, message, result); } });
2021-03-14 19:31:42
像魅力一样工作。但是…… WebClient 比 WebChromeClient 有什么优势吗?
2021-03-15 19:31:42
您的评论对我有帮助……正如下面 Nikhil 的回答一样。
2021-03-19 19:31:42
这可能是一个愚蠢的问题,但无论如何:为什么要覆盖一个方法以仅调用具有相同参数的超级方法?
2021-03-24 19:31:42
不要忘记添加 webview.getSettings().setJavaScriptEnabled(true);
2021-04-08 19:31:42
webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
        return super.onJsAlert(view, url, message, result);
    }
});
这很好用,但是当我prompt从 javascript调用时,它没有显示提示文本,而是显示“https://...处的页面说:”完全打破了嵌入在应用程序中的 WebView 的沉浸感
2021-03-14 19:31:42

以下代码将起作用:

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");
}

你可以试试这个,它对我有用

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);
        }

    });