1

Stack Exchange と Andorid の開発は初めてです。

私はAndroid WebViewに取り組んでいます。アクティビティ クラスに次のコードがあります。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    WebView wv;
    WebSettings ws;

    try {
      wv = (WebView) findViewById(R.id.webview);
      ws = wv.getSettings();

      ws.setJavaScriptCanOpenWindowsAutomatically(true);
      ws.setJavaScriptEnabled(true);

      wv.clearCache(true);
      wv.loadUrl("http://<ip address>:<port>/<context>");
    } catch (Exception e) {
      e.printStackTrace();
    }
}

レイアウト-main.xml:

<WebView 
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
    />

AndroidManifest.xml で:

<uses-sdk android:minSdkVersion="10" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".POCActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

URL には、次のコードを含む index.html があります。

<!DOCTYPE html>
<html>
  <head>
    <title>Contact Example</title>
    <script type="text/javascript">
        alert("Start");
    </script>
  </head>
  <body>
    <p>Database 1</p>
    <div id="test"></div>
  </body>
</html>

作業環境: - Eclipse indigo - Android SDK 最小バージョン 10 - ビルド ターゲット 2.3.3

しかし、Android コードは 1 回しか機能しません。つまり、新しい Android プロジェクトを作成して同じものを実行すると、javascript アラートが表示されます。次回からjavascriptアラートが表示されなくなりました。HTMLページのテキストの変更(「データベース1」を「データベース2」に変更したとしましょう)も表示されません。

私は次のことを試しました:-appcacheをクリア-アプリケーションをアンインストールしてから、プロジェクトを再度実行-クリア

ここで私が間違っていることを教えてください。どんな助けでも大歓迎です。

4

2 に答える 2

2
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient());   

私のコードでこれらを使用すると、私のアラート()は完全に機能しました

于 2012-05-17T12:16:11.323 に答える
0

これは非常に古い質問ですが、最近同じ問題に遭遇したので、後でこれに遭遇した人に解決策を共有したいと思います.

アラートを処理するには、カスタム WebChromeClient を WebView に割り当てる必要があります。

mWebView.webChromeClient = object : WebChromeClient() {
    override fun onJsAlert(view: WebView?, url: String?, message: String?, result: JsResult?): Boolean {
        val alertDialog = AlertDialog.Builder(context)
                    .setMessage(message)
                    .setPositiveButton("OK") { dialogInterface, _ ->
                        dialogInterface.dismiss()
                        result?.confirm()
                    }
                    .setOnCancelListener { result?.cancel() }
                    .setCancelable(true)
                    .create()
        alertDialog.setCanceledOnTouchOutside(true)
        alertDialog.show()

        //Here AlertDialog is just an example. You can also simply show a Toast.
        //But remember to call JsResult.confirm() or JsResult.cancel()

        return true
    }
}

JsResult.confirm()ユーザーがアラート ダイアログを確認またはキャンセルしたかどうかを呼び出すかJsResult.cancel()、WebView に通知する必要があります。それ以外の場合、WebView はアラート ダイアログがまだ表示されている (UI をブロックしている) と見なし、新しいダイアログを表示できません。

于 2020-11-17T05:07:06.250 に答える