JavaScriptアラートがAndroid WebViewで機能しない


91

私のアプリケーションで使用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"
/>

フルを有効にする方法の手がかりJavaScriptはありWebViewますか?


更新

ファイル内
alert()メソッドが機能していることを感謝しhtmlます:)。

今、2つの問題がありますWebView
1:<textarea>ロードしているhtmlファイルでを使用していて、WebViewそこにヒンディー語のフォントを書き込もうとしていますが、ヒンディー語のテキストを書き込もうとすると、記号(長方形の記号のような[])。

デスクトップのFirefoxブラウザで同じことをすると、うまくいきます。で複数言語のサポートを提供する手がかりtextareaはありWebViewますか?

2:[送信]をクリックalert()して別のJavaスクリプトのメソッドでテキストの値を開こうとすると、機能しません。WebChromeClient 現在読み込まれているHTMLページにのみ適用さjavascriptsれ、そのページから呼び出されない場合でも、それは意味がありますか?


6
それは「JavaScript」であり、「Java Script」、「java-script」、または「Java script」ではありません(すべて元の質問に表示されていました)。修正しました。
TJクラウダー2011年

3
@TJCrowder Javascriptと呼ばれるべきだと思います。
クリスセルベック

7
@KrisSelbekk:いいえ。:-) "JavaScript"はOracleの登録商標であり(合併や買収を好む)、Mozillaの実装に(許可を得て)使用されています。どちらの場合も、大文字のS を使用します。これがその名前の唯一の規範的な形式です。もちろん、言語の別の名前はECMAScript(またはES)ですが、ES5について話すときを除いて、実際にそれを使用する人はいません。
TJクラウダー2012

回答:


89

このリンクと最後のコメントをチェックしてください、あなたはWebChromeClientあなたの目的のために使用する必要があります。


8
ありがとうございました!webView.setWebChromeClient(new WebChromeClient(){@Override public boolean onJsAlert(WebView view、String url、String message、JsResult result){return super.onJsAlert(view、url、message、result);}});
nurnachman 2012年

あなたのコメントは私を助けました。以下のNikhilの回答もそうです。
Vamsi Challa

魅力のように機能します。しかし、それから... WebClientはWebChromeClientよりも優れていますか?
Josh

3
それは愚かな質問かもしれませんが、とにかく、なぜ同じparamsでスーパーのメソッドのみを呼び出すようにメソッドをオーバーライドするのですか?
Dmitry Andrievsky

1
追加することを忘れないでくださいwebview.getSettings().setJavaScriptEnabled(true);
Jemshit Iskenderov

119

他の人が示したように、動作させるにはWebChromeClientを設定する必要がありますalert()。デフォルトのWebChromeClient()を設定するだけで十分です。

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

以下のすべてのコメントをありがとう。JavaScriptを有効にする必要があることを示したJohn Smithを含みます。


はい、しかしほとんどの場合、WebChromeClientのイベントを微調整したいので...
Radu Simionescu

10
mWebView.getSettings().setJavaScriptEnabled(true);行の前に追加することで、ようやくそれを機能させることができました mWebView.setWebChromeClient(new WebChromeClient());
John Smith Optional

2
追加することを忘れないでくださいwebview.getSettings().setJavaScriptEnabled(true);
Jemshit Iskenderov

22
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の没入感を完全に壊します
Michael

5

次のコードが機能します。

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

0

あなたはこれで試すことができます、それは私のために働きました

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

    });

0

ユーザーから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;
            }
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.