【问题标题】:How to open new browser from WebViewClient?如何从 WebViewClient 打开新浏览器?
【发布时间】:2010-10-02 13:32:42
【问题描述】:

我无法理解的简短问题,我想在人们单击超链接后从我的 WebView 启动一个新浏览器。但是我如何设置该链接的目标以逃避 WebViewClient?

这是我的代码,非常感谢您的帮助:

WebView site = (WebView)findViewById(R.id.WebView);
  site.setWebViewClient(new WebViewClient());
  site.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
  site.getSettings().setJavaScriptEnabled(true);

  button1.setOnClickListener(button1OnClickListener);
  button2.setOnClickListener(button2OnClickListener);
  button3.setOnClickListener(button3OnClickListener);
  button4.setOnClickListener(button4OnClickListener);


  final AlertDialog alertDialog = new AlertDialog.Builder(this).create();

  progressBar = ProgressDialog.show(FlitsersActivity.this, "Thingy1", "Load...", false, true);

  site.setWebViewClient(new WebViewClient() {
   public boolean shouldOverrideUrlLoading(WebView view, String url) {
       Log.i(TAG, "Loading...");
       view.loadUrl(url);
       return true;
   }

   public void onPageFinished(WebView view, String url) {
       Log.i(TAG, "Done: " +url);
       if (progressBar.isShowing()) {
           progressBar.dismiss();
       }
   }

   public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
       Log.e(TAG, "Error: " + description);
       Toast.makeText(MyActivity.this, "Oh no! " + description, Toast.LENGTH_SHORT).show();
       alertDialog.setTitle("Error");
       alertDialog.setMessage(description);
       alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int which) {
               return;
           }
       });
       alertDialog.show();
   }
 });

 site.loadUrl("http://www.etcetera.com");

}

【问题讨论】:

    标签: android webview


    【解决方案1】:

    没错,谢谢!我想我是在你写第二个回复的时候发现的;)

    现在我正在使用下面的代码:它就像一个魅力 :) 非常感谢您的回复!

    site.setWebViewClient(new WebViewClient() {
       public boolean shouldOverrideUrlLoading(WebView view, String url) {
           String myAlternativeURL = "http://newURL";  
           if (!url.equals(myAlternativeURL)) {  
               {
                   Intent i = new Intent(Intent.ACTION_VIEW);
                   i.setData(Uri.parse("http://newURL"));
                   startActivity(i);
                   }
               return true;  
           } else {
           Log.i(TAG, "Loading...");
           view.loadUrl(url);
           return true;
       }
       }
    

    【讨论】:

      【解决方案2】:

      您正在通过强制 WebView 使用以下代码加载所有 URL 来覆盖所有 URL:

         public boolean shouldOverrideUrlLoading(WebView view, String url) {
             Log.i(TAG, "Loading...");
             view.loadUrl(url);
             return true;
         }
      

      如果您希望它在默认浏览器而不是您的 WebView 中打开,您需要做的是使用 URL 创建一个浏览器意图。 http://developer.android.com/guide/appendix/g-app-intents.html

      代码是这样的:

      Intent i = new Intent(Intent.ACTION_VIEW);
      i.setData(Uri.parse(url));
      startActivity(i);
      

      更多信息:

      if (url.equals("http://www.etcetera.com")
         // load url normaly
      else
         // Load in new window via intent
      

      【讨论】:

      • 感谢您的信赖,但如果我实现此代码,它会在启动 webview 时打开一个新的浏览器窗口。我想做的是:1.启动Webview,加载url。 2. 用户单击已加载页面中的超链接后,该单击将启动包含新超链接的浏览器。与在 HTML 中实现 target="_blank" 时得到的想法相同。任何想法?提前致谢!
      • 那么你显然需要在第一次加载时调用 view.loadURL(url) 。查看我更新的答案,我为你写了你的 if 语句。
      • 呃,看上面的回答,回复有一点小错误。无论如何它都有效,再次感谢您为我指明正确的方向!
      【解决方案3】:

      静态问题

      所以我发现,就我而言,我必须在 startActivity() 之前添加一个上下文

      context.startActivity(browserIntent);
      

      发件人:https://stackoverflow.com/a/6651535/13413319

      为此:

      我有这个变量:

      Context context;
      

      当然是通过Constructor分配它的值

      Context = context;
      

      调用方法后,你需要执行任务。

      openInBrowser(url);
      

      方法:

      public static void openInBrowser(String url) {
              Intent browserIntent = new Intent(Intent.ACTION_VIEW);
              browserIntent.setData(Uri.parse(url));
              context.startActivity(browserIntent);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-12
        • 1970-01-01
        • 2018-08-29
        • 2018-11-16
        • 2020-06-16
        • 2014-02-04
        相关资源
        最近更新 更多