在当前Web视图中打开弹出/外部站点链接

4

我正在编写一款webview,它首先加载一个twitter页面(例如NHL,http://twitter.com/nhl)。你可以看到,你可以找到NHL的推文,每个NHL推文都有另一个链接供用户点击,例如bit.ly/ujcNZo。

在我的webview中,如果我点击那个链接(即bit.ly/ujcNZo),我的webview在1秒后什么也不显示,只有一个白色背景上的Twitter图标,它应该加载内容但没有。

经过一段时间的调查,我认为这与事实有关:推文中的链接(即bit.ly/ujcNZo)实际上在单独的窗口(弹出窗口?)中打开链接,而不是发布链接的当前页面。我通过在笔记本电脑的浏览器中访问NHL的Twitter页面进行了验证。

我的问题是, 1.是否有办法在我的当前webview中加载外部链接(例如bit.ly/ujcNZo)的内容?


我在我的Webview上遇到了相同的问题,没有任何答案对我有用。 你解决了这个问题吗?因为我看到4个月以来都没有评论。 - nishi
不好意思,没有先生:/,如果您解决了,请告诉我... - user1118019
1个回答

2
您可以通过WebViewClient类来控制这个。只需扩展它并覆盖默认实现以获得所需的配置,然后将其设置为当前webview的客户端即可。
活动
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

            // set the webViewClient to a new instance of your custom WebViewClient

    webview.setWebViewClient(new WebActivityClient( this ));

}

定制客户端

/** WebViewClient class for WebView in WebActivity */
private class WebActivityClient extends WebViewClient {

    public static final String TAG = "WebActivityClient";
    private Context context;

    /** Constructor used to grab the context */
    public WebActivityClient( Context context ) {
        this.context = context;
    }

    /** Override to load every link within the page inside this webview instead of using
     * android's default application
     * #7 http://developer.android.com/resources/tutorials/views/hello-webview.html */
    @Override
    public boolean shouldOverrideUrlLoading( WebView view, String url ) {
        view.loadUrl(url);
        return true;
    }

}

希望这能帮到你!

1
嗨Jerry,谢谢你的回复。但是你的解决方案没有起作用。我的代码已经在做你所做的事情,除了我没有在构造函数中传递上下文。实际上,在你的代码中,虽然你传递了上下文,但你在其他任何地方都没有使用它,所以我不确定它是用来做什么的。这不是关于在webview中加载网页,我已经可以做到这一点。我的问题是在现有的webview中加载一个链接(作为弹出窗口打开)。 - user1118019
1
经过进一步测试,似乎任何弹出链接(即在单独窗口中打开内容的超链接)都不会触发shouldOverrideUrlLoading方法...如果您打开非弹出链接...它总是会触发shouldOverrideUrlLoading方法... - user1118019
我没有提供完整的代码,只是提供了一行代码来展示如何设置WebClient属性以及该类的部分实现。我想这会指引你朝着正确的方向前进。在帮助和为你完成工作之间有一条微妙的界线,呵呵呵。所以如果你在shouldOverrideUrlLoading上设置断点,它从未被调用过吗?如果是这样,请提供一个测试URL,我会看看我的实现中会发生什么。 - jerrylroberts
测试URL已在我的原始问题中提供,这里再次提供。http://bit.ly/ujcNZo 感谢您的回复和测试,Jerry。所以基本上在您的webview中,显示此链接http://bit.ly/ujcNZo,并运行您的模拟器或实际设备,尝试单击您在webview上显示的链接(http://bit.ly/ujcNZo),看看您的webview是否接受该链接并将您重定向到实际来源。谢谢! - user1118019
嗨,杰瑞,我已经有你实现的那些内容了,但并没有解决我的问题,所以我想知道上下文参数是用来做什么的。更进一步观察发现,如果链接是一个重定向链接,例如http://bit.ly/ujcNZo(顺便说一句,这不是一种不良链接,它是从Twitter获取的链接,如果你不相信我,请随意在NFL的Twitter上获取此类链接),那么shouldOverrideUrlLoading就不会被调用。 - user1118019

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接