1

サイトのモバイル バージョンを表示する webview があります。ユーザーが必要に応じてフルバージョンのサイトに切り替えることができる「スイッチ」を作成しました。そのため、最初にユーザーはサイトのモバイル バージョンに移動し、その後「スイッチ」を切り替えると、サイトのフル バージョンが読み込まれます。

現在何が起こっているか: 一部のサイトでは、ユーザー エージェントを変更するだけで十分であり、「スイッチ」が切り替えられると PC から読み込まれます。しかし、一部のサイトでは、モバイル デバイスから入力したことを検出でき、モバイル バージョンが表示されます。

「私」がモバイル デバイスではなく PC であることをすべてのサイトに伝えるにはどうすればよいですか? 何かのようなもの:

webView.getSettings().iAmPC(true);    

PS: 例: Android (および Firefox) 用の Opera モバイルにはこの機能があります (設定で「デスクトップ」を選択すると、すべてのサイトでフル バージョンが表示されます)。Android の既定のブラウザー 2.3.6 - ありません。

PPS:webviewでなくても達成する方法を知っていれば、それも役に立ちます。

更新: X-WAP-Profile ヘッダーを変更する必要があるようですが、まだ解決策が見つかりません。ここに記載されているような解決策がありますが、アプリ内では使用できないようです。

PPPS: 私のアプリにはルート アクセスがあるため、ルート アクセスが必要なソリューションも受け入れられます

ランダムまたは空のヘッダーでshouldOverrideUrlLoadingを試しましたがAccept、効果はありません。

4

2 に答える 2

1

一部の Web サイトでは、スクリプトを使用してオブジェクトにクエリを実行navigatorし、ブラウザーのブランド/バージョンを確認します。Opera はそれをオーバーライドします。

于 2012-11-25T20:28:37.920 に答える
0

x-wap-profile ヘッダーがWebkit のFrameLoaderに追加されます。したがって、このヘッダーを削除するには、ファームウェアを変更する必要があります。

できることは、独自の 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 に答える