Skip to content

bluesofy/AtomWebView

Repository files navigation

AtomWebView

Download

使用Tencent X5内核,封装常用配置和方法,不想用X5,可以直接改源码,很简单的。
利用onJsPrompt来实现JS交互,避开Android 4.2以下的WebView漏洞,不需要使用@JavascriptInterface注释。
加了部分常用的功能调用,支持重写自定义扩充。

使用说明 Usage

添加依赖

api 'cn.byk.pandora:atomwebview:1.0.1'

使用方法

  • 直接在布局中使用或者继承后使用都可以
<com.byk.pandora.atomwebview.AtomWebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
  • 自定义WebChromeClient需要继承AtomWebChromeClient,类似的,自定义WebViewClient需要继承AtomWebViewClient

  • 主要API说明

// 调用Js方法,API19以下调用loadUrl(),19以上调用evaluateJavascript(),
// 区别,loadUrl会重载网页,evaluateJavascript不会,且自带回调
invokeJs(final String jsMethod, final ValueCallback<String> callback)

// 滑动监听,可监听到底事件
setScrollWatcher(IScrollWatcher watcher)

// 长按监听,接口方法watcher.onLongClick(int type, HitTestResult result)
// type - 资源类型,常量值见AtomWebView定义
// result.getExtra() - 获取数据
setLongClickWatcher(ILongClickWatcher watcher)

// 需要继承重写,设定是否启用Js,默认true
enableJs()

// 需要继承重写,设定是否需要图片延迟加载,即先加载完网页基本数据再加载图片,默认true
enableDelayLoadImages()

// 释放WebView资源,注意WebView的清理资源影响的是全局进程的,在界面销毁的时候调用
close()

// Js调用Android方法监听,注意IJsBridge的onReceive带String结果值返回,可回调数据给网页Js
setJsBridge(IJsBridge bridge)
  • 已实现的原生方法调用说明,以后可能会以atoms的scheme扩充
// 注意这个是写在Js里的,function名字无所谓
function callAndroid() {
    // 打开网页(调起第三方浏览器)
    var result = prompt("http://www.baidu.com");

    // 打开拨号盘
    var result = prompt("tel:114");
    // 直接拨号(需要权限)
    var result = prompt("tel:114$");

    // 打开短信
    var result = prompt("smsto:10086");
    // 打开短信,预写短信内容
    var result = prompt("smsto:10086$查询流量");

    // 打开相机,request是AcitvityForResult的回调code
    var result = prompt("atoms://camera?request=1");

    // 打开第三方App,写入第三方App的scheme即可
    var result = prompt("tbopen://xxx?xxx=1");
}
  • 如果都不在以上已实现的原生方法调用中,或者打开第三方App失败,会抛出AtomResult自定义处理
public class AtomResult {

    // uri.getScheme()
    private String scheme;

    // uri.getAuthority()
    private String action;

    // 参数字符串,即问号后面的那一串,uri.getQuery()
    private String data;

    private Uri uri;

    // Js.prompt传入的完整String数据
    private String content;
}
  • 如果需要增加加载进度条,可继承AtomWebChromeClient
// 让进度条控件实现接口
public interface IProgress {
    void onProgress(int progress);
    void onVisible(boolean visible);
}

// 重写
public IProgress progress()
  • 如果需要自定义加载错误页面,可继承AtomWebViewClient
// 让自定义View实现接口
public interface IErrorView {
    void onError(WebView webView, int errorCode, String desc, String errorUrl);
}

// 重写
public IErrorView errorView()
  • 学无止境

关于混淆 ProGuard

无需添加混淆


特别鸣谢 Tks to


联系方式 Support or Contact

Releases

No releases published

Packages

No packages published