5

Android 用のハイブリッド アプリを開発していますが、Android WebView のレンダリングは OS のバージョンによって大きく異なります。そのため、Android 2.3 webview は、android 4.4 webview とはレンダリングおよび動作が異なる android 4.0 webview とはレンダリングおよび動作が異なります...この断片化はすべて本当に混乱しており、html ベースのアプリを開発することが問題になります。私はさまざまな画面サイズや密度について話しているのではなく、特定の Web ビューのバグやレンダリング エンジンについて話しているのです。

Android > 2.3 バージョンで同じレンダリングと動作を取得するためだけに特定の webview css ハックを記述する必要がないように、アプリに埋め込むことができる「ユニバーサル」webview コンポーネント (オープンソースまたは商用) は存在しますか?

https://github.com/davisford/android-chromiumなどの実験的なプロジェクトがいくつかあることは知っていますが、実稼働可能なプロジェクトは見つかりませんでした。

4

3 に答える 3

4

これはあなたが探しているものだと思います。

ChromeView 「これにより、アプリケーションは Chromium の最新機能に早期にアクセスできるようになり、Android のさまざまなバージョンでのさまざまな WebView 実装による変動性が取り除かれます。」

https://github.com/pwnall/chromeview

于 2014-06-08T11:21:59.040 に答える
1

そこには多くのツールがありません。それらが systemintern WebView ほど優れているとは思えません。

  1. Chromeview : min-API 14、Chromium ベース、かなり良いようで、バグがないようです
  2. Geckoview : min-API 8、Mozilla から、いくつかのバグがある可能性があります...
  3. Android-Chromium : github から削除されました...
于 2014-06-12T11:25:05.013 に答える
0

これには WebChrmeClient を使用できます。ハックを行う必要はありません。以下のコードは、HTML、URl、および css で動作します。

public class IjoomerWebviewClient extends Activity {

    private WebView webExternalLinks;
    private IjoomerButton btnClose;
    private String link = "";
    private String IN_CONTENT = "";
    SeekBar seekBar;



@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.YOUR_WEBVIEW_LAYOUT);

 webExternalLinks = (WebView) findViewById(R.id.webExternalLinks);
        btnClose = (IjoomerButton) findViewById(R.id.btnClose);

getData();
}

  private void getData(){

  getIntentData();

        webExternalLinks.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
                if(seekBar==null){
                    seekBar = IjoomerUtilities
                            .getLoadingDialog(getString(R.string.dialog_loading_please_wait));
                }
                seekBar.setProgress(progress);
                if(progress==100){
                    seekBar=null;
                }
            }
        });

        webExternalLinks.setWebViewClient(new WebViewClient());
        webExternalLinks.getSettings().setJavaScriptEnabled(true);
        webExternalLinks.getSettings().setPluginState(PluginState.ON);
        webExternalLinks.getSettings().setSupportZoom(true);
        webExternalLinks.getSettings().setBuiltInZoomControls(true);

        if (link != null && link.length() > 0) {
            if (!link.startsWith("http://") && !link.startsWith("https://")) {
                link = "http://" + link;
            }
            webExternalLinks.loadUrl(link);
        } else if (IN_CONTENT != null && IN_CONTENT.trim().length() > 0) {
            StringBuilder sb = new StringBuilder(); // StringBuilder();
            sb.append("<HTML><HEAD><link rel=\"stylesheet\" type=\"text/css\" href=\"weblayout.css\" /></HEAD><body>");
            String str = IN_CONTENT.trim();
            str = str.replaceAll("<iframe width=\"[0-9]*",
                    "<iframe width=\"100\\%");
            str = str.replaceAll("<img[\\w]*",
                    "<img height=\"auto\" style=\"max-width:100\\%\";");
            sb.append(str);
            sb.append("</body></HTML>");
            webExternalLinks.loadDataWithBaseURL("file:///android_asset/css/",
                    sb.toString(), "text/html", "utf-8", null);
        }
}



    private void getIntentData() {
        try {
            link = this.getIntent().getStringExtra("url");
            if (link == null) {
                IN_CONTENT = this.getIntent().getStringExtra("IN_CONTENT");
            }

        } catch (Exception e) {
            IN_CONTENT = this.getIntent().getStringExtra("IN_CONTENT");
        }
    }

    @Override
    public void onBackPressed() {
        if(webExternalLinks.canGoBack()){
            webExternalLinks.goBack();
        }else{
            super.onBackPressed();
        }
    }
}
于 2014-06-13T04:45:59.043 に答える