Android WebView:特定网站无法正常呈现。

时间:2015-07-09 17:15:37

标签: java android webview

我正在使用一个应该打开任何网站的WebView。 我有2个活动 - CallingActivity和UrlBrowser。 webview位于UrlBrowser中。 CallingActivity有一个EditText,它从用户获取URL并通过作为额外传递的Intent对象传递的bundle对象将其提供给UrlBrowser活动。 UrlBrowser活动使用此URL加载到webview中。

我必须使用加载进度更新进度条,我也使用onProgressChanged方法来更新值。

我面临的问题是某个特定网站:www.flipkart.com无法正常呈现。在webview中可以看到一个空白的浅褐色补丁。

我尝试更改WebView的用户代理。在将桌面浏览器的用户代理字符串放入所有网站(包括flipkart)时,所有网站版本都已打开。我需要移动版。一旦我恢复使用移动浏览器的用户代理,就会出现同样的问题。这让我相信用户代理可能出了问题,所以我将用户代理伪造成chrome的用户代理,问题仍然存在。 以下是两个活动和其他相关文件的代码:

UrlBrowser.Java

    public class UrlBrowser extends AppCompatActivity
    {


    WebView webView;
    ProgressBar progressBar;
    String finalUrl;
    Context appcontext;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_url_browser);
        webView=(WebView)findViewById(R.id.webView);
        progressBar=(ProgressBar)findViewById(R.id.progressBar);
        progressBar.setMax(100);
        Bundle b= getIntent().getExtras();
        String finalUrl="http://"+b.getString("url");
        appcontext=getApplicationContext();
        viewPage(finalUrl);

    }
    public class MyWebViewClient extends WebViewClient
    {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url)
            {
                Toast.makeText(appcontext,"Waiting for "+url ,Toast.LENGTH_SHORT).show();
                view.loadUrl(url);
                return true;
            }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon)
        {
            progressBar.setVisibility(view.VISIBLE);
        }

        @Override
        public void onPageFinished(WebView view, String url)
        {
            progressBar.setVisibility(view.INVISIBLE);
        }
    }

    public void viewPage(String url)
    {
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setDomStorageEnabled(true);
        webView.getSettings().setAppCacheEnabled(true);
        webView.ge    webView.getSettings().setAppCachePath("/data/data"+getPackageName()+"/cache");
        webView.getSettings().setAllowFileAccess(true);
        webView.setWebViewClient(new MyWebViewClient());
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                progressBar.setProgress(newProgress);
                super.onProgressChanged(view, newProgress);
           }
        });
        webView.loadUrl(url);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_url_browser, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

CallingActivity.java

    public class CallingActivity extends AppCompatActivity{

    Button goButton;
    EditText urlField;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calling);
        goButton=(Button)findViewById(R.id.goButton);
        urlField=(EditText)findViewById(R.id.urlField);
    }
    public void onClick(View v)
    {
        String url=urlField.getText().toString();
        Intent i=new Intent(this,UrlBrowser.class);
        Bundle b=new Bundle();
        b.putString("url",url);
        i.putExtras(b);
        startActivity(i);

    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_calling, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

我该如何解决这个问题?任何帮助表示赞赏

0 个答案:

没有答案