【问题标题】:Link should be open in same web view in Android链接应该在 Android 的同一个网页视图中打开
【发布时间】:2011-09-05 13:38:20
【问题描述】:

我是 Android 新手,我正在尝试使用此代码在 webview 中打开链接

WebView myWebView = (WebView) findViewById(R.id.webinfo);
    myWebView.loadUrl("http://oslobokfestival.netteam.no/artical.php?articalid=93");
    myWebView.setBackgroundResource(R.drawable.lbg);
    myWebView.setBackgroundColor(Color.TRANSPARENT);
    myWebView.getSettings().setJavaScriptEnabled(true);

并且在这个 HTML 页面中包含一些链接,我希望当用户单击该链接时应该在同一个 webview 中打开, 此时它在移动浏览器中打开,请给我适当的解决方案.. 谢谢。

【问题讨论】:

  • 你可以查看this thread,和你想做的一样。
  • 点击网址即可获得网址>>>>

标签: android


【解决方案1】:

您需要将WebViewClient 添加到您的WebView 才能在WebView 中打开它。类似的东西

myWebView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        view.loadUrl(request.getUrl().toString());
        return false;
    }
});

【讨论】:

  • 这行得通,但是有没有办法允许在新窗口中打开应用了 target=_blank 的链接??
  • 它工作正常,但我想在外部 webview 上添加一个图标
  • shouldOverrideUrlLoading(WebView view, String url) 已弃用,我们可以改用shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
  • getUrl() 需要 API 级别 21,因此您无法在某些设备上运行应用程序。
  • 文档说你不应该调用 view.loadUrl(...) 而只是返回 false:“注意:不要使用请求的 URL 调用 WebView#loadUrl(String) 然后返回 true。这会不必要地取消当前加载并使用相同的 URL 开始新的加载。继续加载给定 URL 的正确方法是简单地返回 false,而不调用 WebView#loadUrl(String)。" (developer.android.com/reference/android/webkit/…)
【解决方案2】:

尝试删除 @Override 并将其放在 loadurl 之后 这对我有用...

myWebView.loadUrl("http://someurl.com");
myWebView.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView viewx, String urlx) {
        viewx.loadUrl(urlx);
        return false;
    }
});

【讨论】:

  • @Overrideand 只是一个注释,告诉你重写一个方法,你可以(而且你应该)把它保留在那里
【解决方案3】:

对我来说,它的作品只需覆盖

shouldOverrideUrlLoading 方法和

返回super.shouldOverrideUrlLoading(view, request)

这将处理同一 WebView 中的所有链接。

webview.setWebViewClient(new WebViewClient(){
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
         return super.shouldOverrideUrlLoading(view, request);
      }
});

【讨论】:

    【解决方案4】:

    像这样覆盖WebViewClient的方法shouldOverrideUrlLoading

    myWebView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                view.loadUrl(request.toString());
                return true;
            }
        });
    

    并在您的清单文件中添加此标签<uses-permission android:name="android.permission.INTERNET" />以访问互联网

    【讨论】:

      【解决方案5】:
      public class MainActivity extends Activity {
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              WebView webView = (WebView) findViewById(R.id.webView);
              WebSettings webSettings = webView.getSettings();
              webSettings.setJavaScriptEnabled(true);
              webView.loadUrl("#");
          }
      }
      

      【讨论】:

      • 很好,但做了一些解释,使答案更加独立!
      【解决方案6】:

      这是 kotlin 的操作方法,同时还要注意 21 以下的版本:

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                  myWebView.webViewClient = object : WebViewClient() {
                      override fun shouldOverrideUrlLoading(
                          view: WebView,
                          request: WebResourceRequest
                      ): Boolean {
                          view.loadUrl(request.url.toString())
                          return false
                      }
                  }
              } else {
                  myWebView.webViewClient = object : WebViewClient() {
                      override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
                          view?.loadUrl(url.toString())
                          return false
                      }
                  }
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-05
        • 1970-01-01
        • 1970-01-01
        • 2011-08-12
        • 2015-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多