Fragment里使用 PhoneGap 的 CordovaWebView

来源:互联网 发布:怎样下载视频软件 编辑:程序博客网 时间:2024/05/16 05:41

首先说明一下为什么要使用 CordovaWebView 而不直接使用 WebView 呢?由于 Android4.4 版本之后对 WebView 做了很大的改变,具体参考

这篇文章:理解WebKit和Chromium: Android 4.4 上的Chromium WebView,这样的改变会出现这样的问题,也是我遇到的问题:webview4.4以上版本使用loadurl加载过长js文件失效问题

网上也有相关的解决方法,但是感觉很麻烦,而且解决不了我的问题,最后想了想,我们在使用 PhoneGap 的时候有一个继承 WebView 的 CordovaWebView 组件

已经对于这样的问题做了很好的处理,所以为何不直接用咧,所以就有了这篇文章的: Fragment里使用 PhoneGap 的 CordovaWebView

实现一个类继承 PhoneGap 的接口:CordovaInterface 

<span style="font-size:14px;">import android.app.Activity;import android.content.ContextWrapper;import android.content.Intent;import org.apache.cordova.CordovaInterface;import org.apache.cordova.CordovaPlugin;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * Created by long on 2016/5/30. */public class CordovaContext extends ContextWrapper implements CordovaInterface {    Activity activity;    protected final ExecutorService threadPool = Executors.newCachedThreadPool();    public CordovaContext(Activity activity) {        super(activity.getBaseContext());        this.activity = activity;    }    @Override    public void startActivityForResult(CordovaPlugin cordovaPlugin, Intent intent, int i) {    }    @Override    public void setActivityResultCallback(CordovaPlugin cordovaPlugin) {    }    @Override    public Activity getActivity() {        return activity;    }    @Override    public Object onMessage(String s, Object o) {        return null;    }    @Override    public ExecutorService getThreadPool() {        return threadPool;    }}</span>


<span style="font-size:14px;">import android.app.Fragment;import android.os.Build;import android.os.Bundle;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.webkit.WebView;import org.apache.cordova.Config;import org.apache.cordova.CordovaWebView;public class HomeFragment extends Fragment {    private View view = null;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {            LayoutInflater localInflater = inflater.cloneInContext(new CordovaContext(this.getActivity()));            view = localInflater.inflate(R.layout.fragment_cordova, container, false);            CordovaWebView webView = (CordovaWebView) view.findViewById(R.id.id_cordovaWebView);            Config.init(getActivity());            webView.loadUrl("file:///android_asset/www/index_home.html");        }        return view;    }}</span>

相关文章分享:

http://www.lai18.com/content/1978961.html

https://github.com/Adobe-Marketing-Cloud-Apps/app-sample-android-phonegap/wiki/Embed-Webview-in-Android-Fragment

0 0
原创粉丝点击