我已经在我的中加载了一个外部URL WebView. 。现在我需要的是,当用户单击加载的页面上的链接时,它必须像普通浏览器一样工作并在相同的位置打开链接 WebView. 。但它打开默认浏览器并加载页面?

我已经启用了 JavaScript。但它仍然不起作用。我是不是忘记了什么?

有帮助吗?

解决方案

如果您使用的是 WebView 如果你不想要默认的 Android 行为,你必须自己拦截点击。

您可以监视事件 WebView 用一个 WebViewClient. 。你想要的方法是 shouldOverrideUrlLoading(). 。这允许您在选择特定 URL 时执行自己的操作。

您设置了 WebViewClient 你的 WebView 使用 setWebViewClient() 方法.

如果你看一下 WebView SDK 中的示例 有一个例子可以满足您的需求。很简单:

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

其他提示

在某些情况下,你可能会如果你不触发网址加载方法重定向需要onLoadResource的覆盖。在这种情况下我尝试以下内容:

@Override
public void onLoadResource(WebView view, String url)
{
    if (url.equals("http://redirectexample.com"))
    {
        //do your own thing here
    }
    else
    {
        super.onLoadResource(view, url);
    }           
}

文档说,点击一个链接中的WebView会启动应用程序处理URL。你需要重写此默认行为

    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });

或如果没有条件逻辑的方法简单地做到这一点

myWebView.setWebViewClient(new WebViewClient());

将此2行代码中的 -

mWebView.setWebChromeClient(new WebChromeClient()); 
mWebView.setWebViewClient(new WebViewClient());

的方法boolean shouldOverrideUrlLoading(WebView view, String url)被废弃在API 24.如果要支持新的设备应该使用boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)

您可以通过做这样的事情同时使用:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return true;
        }
    });
} else {
    newsItem.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });
}

Arulx个Z回答正是我一直在寻找。

我正在写与抽屉式导航的应用程序与recyclerview和网页视图,用于保持网页浏览应用程序内点击超级链接的无论(因此不启动外部网络浏览器)。对于其将足以把下面的2行的代码:

mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());

正好在你的WebView声明。

下面是我的实施web视图码的示例:

public class WebView1 extends AppCompatActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    WebView wv = (WebView) findViewById(R.id.wv1); //webview statement
    wv.setWebViewClient(new WebViewClient());    //the lines of code added
    wv.setWebChromeClient(new WebChromeClient()); //same as above

    wv.loadUrl("http://www.google.com");
}}

这样,每次在网站上点击链接将加载的网页视图内。 (使用Android Studio中1.2.2所有SDK的更新)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top