1
private class HelloWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }   }

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        webview = (WebView) findViewById(R.id.webview);
        webview.setWebViewClient(new HelloWebViewClient());
        webview.getSettings().setJavaScriptEnabled(true);
        webview.loadUrl("http://mydomain.com");
    }

これは非常に単純な webview デモです (チュートリアルに従って作成しました)。ユーザーが私のアプリケーションをロードすると、この webview がポップアップし、その中でインターネットにアクセスできます。

イベントを「聞く」にはどうすればよいですか?

  • URLに「google.com」が含まれる場合
  • または、HTML に「google」という単語が含まれている場合

ユーザーが私の webview を使用して Web を閲覧しているので、それらのことを聞いて、それが発生したときに関数を呼び出したいと思います。

4

3 に答える 3

3

shouldOverrideUrlLoading のドキュメントは、理解するのに数回読んだだけです。

現在の WebView で URL を処理する場合は、WebView.loadUrl を呼び出す必要はなく、false を返すだけです。アプリに特定の URL でまったく異なることをさせたい場合は、必要なことを行って true を返します。

ホストからのものではないすべての URL を、WebView ではなく電話のブラウザー アプリで処理する必要がありました。これが私の実装です:

 @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
    boolean returnVal = false;
    if(url.startsWith(mUrlHost)) {
      //current Webview handles the URL
    } else {
      Toast.makeText(mActivity, "Launching Browser", Toast.LENGTH_SHORT).show();
      Uri uri = Uri.parse(url);
      Intent intent = new Intent(Intent.ACTION_VIEW, uri);
      mActivity.startActivity(intent);
      returnVal = true;
    }
    return returnVal;
  }
于 2010-12-22T15:40:46.137 に答える
0

良い候補と思われるビューメソッドがあります。ここでクラスのドキュメントを確認する必要があります。

public void onLoadResource (WebView view, String url)

ページが読み込まれる前に URL を検査できるようにする必要があります。

public void onPageFinished (WebView view, String url)

実際に完成したロード済みコンテンツを検索できるようにする必要があります。

于 2010-02-08T08:53:38.153 に答える
0

google.com リクエストをリッスンするには、コード サンプルのように shouldOverrideUrlLoading をオーバーライドする必要がありますが、以下のコード スニペットのように、それらのリクエストに対して代替アクションを提供する必要があります。

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (url.contains("google.com")) {
        // Here you can do whatever you want
        view.loadUrl("http://example.com/");
        return true;
    }

    // The default action, open the URL in the same WebView
    view.loadUrl(url);
    return true;
}
于 2010-06-28T11:21:24.300 に答える