WebViewClient で一般的な JavaScript を有効にする
2023-08-30 18:29:19
質問
Google で答えを探しているとき、解決不可能と思われる問題で困っているのは私だけではなさそうです。
私は、カスタムの WebViewClient で WebView を作成することができました。これは、processdialog を持ち、URLを読み込めなかった場合にエラーメッセージを表示することを可能にします。
しかし、これはJavaScriptで問題を起こします。私が読み込んでいる URL には、HTML 要素の CSS スタイルを変更したり (要素の表示または非表示)、クリック時に別の場所にリダイレクトしたり、あるいはアラート ボックスを表示したりする JavaScript が含まれています。しかし、WebViewClientを使用することで、これらのどれも動作しません。
これは私がページを読み込む方法です。
public void loadUrl(String url)
{
final ProgressDialog dialog = ProgressDialog.show(myActivity.this, "", getString(R.string.loading), true);
final WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.setVerticalScrollBarEnabled(false);
myWebView.setHorizontalScrollBarEnabled(false);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
myWebView.setWebViewClient(new WebViewClient()
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
Toast.makeText(myActivity.this, url, Toast.LENGTH_SHORT).show(); //Debugging purposes
if (url.endsWith(".mp4"))
{
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "video/mp4");
view.getContext().startActivity(intent);
}
else
{
view.loadUrl(url);
}
return true;
}
public void onPageFinished(WebView view, String url)
{
//Toast.makeText(myActivity.this, "Oh no!", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
{
Toast.makeText(myActivity.this, description, Toast.LENGTH_SHORT).show();
String summary = "<html><body><strong>" + getString(R.string.lost_connection) + "</body></html>";
myWebView.loadData(summary, "text/html", "utf-8");
}
}); //End WebViewClient
myWebView.loadUrl(url);
}
これはおそらくもっとスマートな方法でできるのでしょうが、私はJavaもAndroidの開発も初めてなので...。
WebViewClientのJavaScriptを全く有効にすることはできないのでしょうか? WebViewClientを削除すると問題は解決しますが、その場合、ページのエラーや読み込みが終了したときのイベントをキャッチすることができません。
どのように解決するのですか?
私はあなたの正確な問題が何であるかわからないが、私はJavaScriptを有効にし、カスタム
WebViewclient
を問題なく有効にすることができます。
WebView vistaWeb = (WebView) findViewById(R.id.webview);
vistaWeb.setWebChromeClient(new MyCustomChromeClient(this));
vistaWeb.setWebViewClient(new MyCustomWebViewClient(this));
vistaWeb.clearCache(true);
vistaWeb.clearHistory();
vistaWeb.getSettings().setJavaScriptEnabled(true);
vistaWeb.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
関連
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] Android - タイトルバーに戻るボタンが表示される
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] DialogFragmentを正しく終了させるには?
-
[解決済み] Android: ランドスケープモード用の代替レイアウト xml
-
[解決済み] ArrayList<MyCustomClass>をJSONArrayに変換する。
-
[解決済み] Androidアプリケーションのヒープサイズを大きくするには?
-
[解決済み] FABアイコンの色を設定する
-
[解決済み] Android APKファイルの中身を見るには?
-
[解決済み] アンドロイドボタンセレクター
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] handler.postDelayed()を停止する。
-
[解決済み] アプリ内課金テスト:android.test.purchased already owned
-
[解決済み] これはどういうことですか?失敗 [INSTALL_FAILED_CONTAINER_ERROR]?
-
[解決済み] XMLで矩形を描画できますか?
-
[解決済み] Gmailの3分割アニメーションシナリオの完全動作サンプル?
-
[解決済み] Android: ランドスケープモード用の代替レイアウト xml
-
[解決済み] Gradleでビルドタイプを使用し、ContentProviderを使用する同じアプリを1つのデバイスで実行する。
-
[解決済み] アダプタからActivityメソッドを呼び出す
-
[解決済み] FABアイコンの色を設定する
-
[解決済み] サポートライブラリのアクションバーをPreferenceActivityに追加するには?