1

我有一个 webview,它显示网站的移动版本。我做了“切换”,如果他愿意,它允许用户切换到完整版的网站。因此,首先用户转到网站的移动版本,然后他可以切换“切换”并加载网站的完整版本。

现在发生了什么:对于某些站点,只需更改用户代理就足够了,并且当切换“切换”时,它们会从 PC 加载。但是有些网站仍然能够检测到,我从移动设备进入并且仍然向我显示移动版本。

我如何告诉所有网站,“我”不是移动设备,而是 PC? 就像是:

webView.getSettings().iAmPC(true);    

PS:例如:适用于 Android(和 Firefox)的 Opera mobile 具有此功能(如果我在首选项中选择“桌面”,每个站点都会给我它的完整版本)。Android 默认浏览器 2.3.6 - 不是。

PPS:如果你知道如何在 webview 中实现它,它也会很有用。

更新:似乎应该更改X-WAP-Profile 标头,但仍未找到解决方案。这里提到了一种解决方案,但它似乎在应用程序内无法使用。

PPPS:我的应用程序具有 root 访问权限,因此也接受需要 root 访问权限的解决方案

尝试使用随机或空标题的shouldOverrideUrlLoadingAccept - 无效。

4

2 回答 2

1

一些网站navigator使用脚本查询对象以检查浏览器品牌/版本。Opera 会覆盖它,您可能也想要。

于 2012-11-25T20:28:37.920 回答
0

在 Webkit 的FrameLoader中添加了 x-wap-profile 标头。因此,需要更改固件才能删除此标头。

您可以做的是尝试拥有自己的 httpclient 并自己获取内容。已在此帖子上尝试过

编辑:更新。

DefaultHttpClient client = new DefaultHttpClient();
comments.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url){

                String content = "";
                try {
                   content = getUrlContent(url)
                } catch (Exception e) {
                   e.printStackTrace();
                }
                view.loadDataWithBaseURL("BaseWebUrl", content, "text/html", "utf-8", "");
                return true;
            }
        });


    synchronized String getUrlContent(String url) {


        // Create client and set specific user-agent string
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(url);
        //request.setHeader("User-Agent", sUserAgent);

        try {
            HttpResponse response = client.execute(request);

            // Check if server response is valid
            StatusLine status = response.getStatusLine();
            if (status.getStatusCode() != HTTP_STATUS_OK) {
               return "Error";
            }

            // Pull content stream from response
            HttpEntity entity = response.getEntity();
            return EntityUtils.toString(entity)
    }
}
于 2012-12-15T20:02:02.273 回答