6

webview でアプリを開発していますが、JavaScript を有効にして webview に警告ダイアログを表示する方法がわかりません。

私はこれを試したことがありますが、私にはうまくいきません。まず、webview と websettings オブジェクトを作成し、次のパラメーターを設定します。

    webSettings.setJavaScriptEnabled(true);

    webSettings.setBuiltInZoomControls(true);

    mWebView.requestFocusFromTouch();
4

5 に答える 5

22

あなたのコードに従って、WebviewclientとWebcromeclientを設定してWebviewでJavascriptを有効にするように設定しないと思いました。

 mWebView.setWebViewClient(new WebViewClient());
 mWebView.setWebChromeClient(new WebChromeClient());

次に、次のコードを使用して Html ページを読み込みます。

 mWebView.loadUrl("file:///android_asset/"+Your_Html_Page);

これは Webview の Html 部分です。

<!DOCTYPE html>
<html>
<head>
    <script>
    function myFunction()
    {
        alert("Hello! I am an alert box!");
    }
    </script>
</head>
<body>

<input type="button" onclick="myFunction()" value="Show alert box" />
</body>
</html>

これを試してみてください。

于 2013-05-11T05:46:27.143 に答える
6

JavaScript関数WebChromeClientからメッセージボックスを表示したい場合は必須ではありません。alertJavaScript コードとクライアント側 Android コードの間のインターフェースを作成できます。

以下の例では、 JavaScript の関数を使用する代わりに、 JavaScript コードで Android コードのメソッドを呼び出してを表示できます。これは、アラートを表示する最も便利で広くサポートされている方法であることがわかりました。Dialogalert()

Android アプリケーションに次のクラスを含めます。

ファイル: WebAppInterface.java

import android.content.Context;
import android.webkit.JavascriptInterface;

public class WebAppInterface {
    Context mContext;

    /** Instantiate the interface and set the context */
    WebAppInterface(Context c) {
        mContext = c;
    }

    /** Show a Message box from the web page */
    @JavascriptInterface
    public void androidAlert(String message) {
        DialogBox dbx = new DialogBox();
        dbx.dialogBox(message, "I get it", "",mContext);
    }
}

ファイル: DialogBox.java

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;

public class DialogBox {    
    public boolean dialogBox(String msg, String okButton, String cancelButton, final Context activity) {
        Dialog v = null;
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(activity);
        alertDialogBuilder.setMessage(msg);
        if (okButton != "") {
            alertDialogBuilder.setPositiveButton(okButton,
                    new DialogInterface.OnClickListener() {    
                        @Override
                        public void onClick(DialogInterface arg0, int arg1) { /**/ }
                    });
        }    
        if (cancelButton != "") {
            alertDialogBuilder.setNegativeButton(cancelButton,
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface arg0, int arg1) { /**/ }
                    });
        }

        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
        return true;
    }    
}

次に、withで実行される JavaScript にクラスをバインドし、 interface という名前を付けます。WebAppInterfaceWebViewaddJavascriptInterface()Android

WebView mWebView = (WebView) findViewById(R.id.webview);
mWebView.addJavascriptInterface(new WebAppInterface(this), "Android");

Androidこれにより、で実行される JavaScript用に呼び出されるインターフェースが作成されますWebView。この時点で、Web アプリケーション WebAppInterfaceクラスにアクセスできます。以下は、ユーザーがボタンをクリックしたときに新しいインターフェイスを使用してメッセージ ボックスを作成する HTML と JavaScript の一部です。

<input type="button" value="Alert!" onClick="javascript:Android.androidAlert('It works!');" />

ボタンをクリックすると、Androidインターフェイスを使用してメソッドが呼び出さ WebAppInterface.androidAlert()れます。

ちょっとした警告:を使用addJavascriptInterface()すると、JavaScript で Android アプリケーションを制御できるようになります。これは非常に便利な機能である場合もあれば、危険なセキュリティ上の問題になる場合もあります。. _ addJavascriptInterface()_WebView

于 2016-07-29T11:22:58.220 に答える
1

ウェブビューで JavaScript ダイアログを有効にするには、この回答を試すことができます

于 2017-08-28T11:55:49.503 に答える
0

WebView のイベントからネイティブの AlertDialog を表示したい場合、これがBinding JavaScript code to Android code を探しているものです。

サンプル コードは、このリンクから入手できます。Toast を示す例があります。アラート ダイアログを挿入して表示できます。

于 2013-05-11T05:45:57.563 に答える
0

このコードを試してください:

public OnClickListener imageButtonViewOnClickListener = new OnClickListener() {
public void onClick(View v) {

LayoutInflater inflater = LayoutInflater.from(MyActivity.this);

// error here
View alertDialogView = inflater.inflate(R.layout.alert_dialog_layout, null);

WebView myWebView = (WebView) findViewById(R.id.DialogWebView);
myWebView.loadData(webContent, "text/html", "utf-8");
AlertDialog.Builder builder = new AlertDialog.Builder(MyActivity.this);
builder.setView(alertDialogView);

builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
        dialog.cancel();
    }
}).show();
}
};

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:orientation="vertical">

<WebView android:id="@+id/DialogWebView" android:layout_height="wrap_content"
android:layout_width="fill_parent" android:layout_marginLeft="20dip"
android:layout_marginRight="20dip"
android:textAppearance="?android:attr/textAppearanceMedium" />
于 2013-05-11T05:41:11.863 に答える