webview页面和壳通信的库(精简版)

// PG精简版
(function() {
    var PG = {
            iosBridge: null,
            callbackId: 0,
            callbacks: [],
            commandQueue: [],
            commandQueueFlushing: false
        },
        ua = navigator.userAgent,
        isIOS = (ua.indexOf("iPhone") > -1 || ua.indexOf("iPad") > -1 || ua.indexOf("iPod") > -1) ? true : false;
    PG.getAndClearQueuedCommands = function () {
        var commandQueue_json = JSON.stringify(PG.commandQueue);
        PG.commandQueue = [];
        return commandQueue_json;
    };

    PG.exec = function(method, callback, args) {
        var callbackId = ‘‘;
        if (typeof(callback) == "undefined") {
            callback = null;
        }
        if (typeof(args) == "undefined") {
            args = {};
        }

        if (callback && typeof(callback) == ‘function‘) {
            callbackId = method + PG.callbackId++;
            PG.callbacks[callbackId] = callback;
        }

        var obj = {
            Method: method,
            CallbackId: callbackId,
            Args: args
        };

        if (isIOS) {
            if (PG.iosBridge == null) {
                PG.iosBridge = document.createElement("iframe");
                PG.iosBridge.setAttribute("style", "display:none;");
                PG.iosBridge.setAttribute("height", "0px");
                PG.iosBridge.setAttribute("width", "0px");
                PG.iosBridge.setAttribute("frameborder", "0");
                document.documentElement.appendChild(PG.iosBridge);
            }

            PG.commandQueue.push(JSON.stringify(obj));
            if (!PG.commandQueueFlushing) {
                PG.iosBridge.src = ‘pg://ready‘;
            }

        } else if (window.comjs) {
            // android
            window.comjs.notify(‘pg://‘ + encodeURIComponent(JSON.stringify(obj)));
        } else {
            console.log("非ios或android平台,不合适吧");
        }

    };

    PG.callback = function(callbackId, args) {
        if (PG.callbacks[callbackId]) {
            try {
                var temp = decodeURIComponent(args),
                    obj = JSON.parse(temp);

                PG.callbacks[callbackId](obj);

            } catch (e) {
                console.log("Error in success callback: " + callbackId + " = " + e);
            }

            delete PG.callbacks[callbackId];

        }
    };

    if (typeof(window) === "object" && typeof(window.document) === "object") {
        window.PG = PG;
    }

})();
时间: 2024-10-10 04:28:24

webview页面和壳通信的库(精简版)的相关文章

Android WebView页面加载优化

目前webapp越来越多,体验也越来越好,为了能够更好的使用WebView展示出流畅的的页面,可以从以下几点做优化: WebView缓存 资源文件本地存储 减少耗时操作 客户端UI优化 可能有人会说了,为什么不做成native的呢,这样就不用那么的麻烦了.如果我需要加载的内容都是静态的,当然做成native的是最好的,为什么我们要使用WebView呢,因为它可以加载一些容易改变的内容,同时也方便制作多平台应用. WebView可以优化的哪些地方呢? WebView缓存 开启WebView的缓存功

两个页面之间的通信

今天要给大家说的是两个不同页面之间的通信,通过一个拖拽demo来模拟: 首先,写好基础的拖拽代码: <script> window.onload = function() { var oDiv = document.getElementById('div'); oDiv.onmousedown = function(ev) { var ev = window.event || ev; var disX = ev.clientX - oDiv.offsetLeft; var disY = ev.

测量webView页面性能技术方案

测量webView页面性能(使用UiAutomator和性能监控工具) 背景: 俺双11会场测试的总指挥想要确认,在猫客的webview中填多少坑位合适,所以进行了如下操作并获取性能: 1,进入webview页面滑动到底部,然后再快速回到顶部, 2,点击顶部的banner进入下级页面, 3,页面深度3层,即重复1,2该操作3次. 采用的技术 需求拆分为2部分,webview控制脚本和性能监控. 脚本 UiAutomator 因为猫客的自动化采用UiAutomator实现,已经提供了很多封装方法,

vs2012引入新lib-----附cocos2dx3.2 http通信lib库添加

先说说普通的两种方法(请直接只用方法3来添加): 方法1:  通过设置工程配置来添加lib库. 转自网上: A.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录. B.添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录. C  然后添加工程引用的lib文件名:工程---属性---配置属性---链接器---输入---附加依赖项:加上lib文件名. 这种方法比较繁

在app登录过后,webview页面使用app登录cookie直接进入

在app登录的时候需要把cookie保存下来 String cookieFields = response.getHeaders("Set-Cookie")[0] .getValue(); String cookie = cookieFields.split(";\\s*")[0]; HttpGet nextGet = new HttpGet(url); nextGet.setHeader("Cookie", cookie); CookieSyn

iOS开发Safari调试WebView页面

App混合开发现已是常态,不过作为app端开发人员,对H5页面的使用,可不能简单的局限于使用,一些简单的调试方法还是有必要了解的. 关于如何在使用webview过程中,如何对web内对内容进行调试,这里会简单讲一下步骤. 一.真机或Simulator  打开"设置"->"Safari"->"高级"->"Web检查器" 二.打开电脑上 Safari  ->"偏好设置" -> &q

js 页面间的通信

目录 一.window对象的open方法 1.window对象 2.window对象的open方法 (1)window.open(URL,name,features,replace) (2)用window.open方法实现页面通信 3.window.showModalDialog (1)window.showModalDialog (2)window.showModelessDialog (3)兼容性 4.window的height和width (1)原生js的window.innerWidth

Webview页面的控件元素定位

前言 现在有很多App都是Hybrid的,即有原生的页面又有Webview的页面,元素的可以通过uiautomatorviewer工具 进行控件元素的定位,Webview页面的则无法通过此方式定位,而是需要Chrome浏览器来协助定位. Webview控件元素定位 1.在手机中打开当前app的webview界面,使用usb连接电脑后, 2.在PC端的Chrome浏览器上输入:chrome://inspect/#devices(网络需FQ才可使用) 3.点击Webview里的inspect,即可弹

让微信小程序页面之间的通信不在变得困难

一个开始 小程序开发者总会碰到各种页面之间的通信问题,实现方式也五花八门,比如... 场景还原 首先这是一个电商小程序. 有这样一个需求: 首页某个地方要展示购物车商品数量. 当我在其他页面加购了商品,首页数量刷新. 实现方式 方式一:onShow直接请求接口 Page({ onShow() { // ...一些逻辑 // 后端请求新的购物车数量 this.requestCartNum(); } }) 不足: 每次onShow都要请求接口,浪费资源. 方式二:globalData存储购物车数量,