铭
  • 发布:2016-12-19 23:24
  • 更新:2019-04-04 09:27
  • 阅读:2522

appendJsFile把MUI注入在安卓正常,在IOS中找不到

分类:MUI

今天更新了新版本,就出现了这个问题,原来还是正常的。

main = plus.webview.currentWebview();  
                bodyStyle.blockNetworkImage = false; //阻塞图片  
                home = plus.webview.create(homeURL, homeURL, bodyStyle);  
                currentTab = home;  
                overrideResource(home, homeURL);  
                overrideUrlLoading(home, homeURL);  
                home.hide();  
                evalJs(home, homeURL);  
                setCss(home, homeURL);  

                home.onloaded = function() {  
                    console.log('加载完home');  
                    this.evalJS('handleTab();mui.alert("hi");');  
                    if(isFirst) {  
                        createOtherTabs();  
                        isFirst = false;  
                    }  
                };  
                main.append(home);

上面那段代码的意思是:在index.html中创建了一个webview(服务端),然后注入了JS文件执行,其它JS文件注入正常执行了,但是MUI文件注入执行却出现问题.
上面那段代码中mui.alert("hi");在安卓中是正常执行的,但是在IOS中就报错:
[ERROR] : TypeError: mui.alert is not a function. (In 'mui.alert("hi")', 'mui.alert' is undefined)
其中MUI版本为:v3.4.1
IOS版本:10.1.1

2016-12-19 23:24 负责人:无 分享
已邀请:

最佳回复

BoredApe

BoredApe - 有问题就会有答案。

临时解决方法:

mui.js 890行 中的 mui fiexd classList 相关的代码注释掉

/**  
 * mui fixed classList  
 * @param {type} document  
 * @returns {undefined}  
 */  
(function(document) {  
    if (!("classList" in document.documentElement) && Object.defineProperty && typeof HTMLElement !== 'undefined') {  

        Object.defineProperty(HTMLElement.prototype, 'classList', {  
            get: function() {  
                var self = this;  
                function update(fn) {  
                    return function(value) {  
                        var classes = self.className.split(/\s+/),  
                                index = classes.indexOf(value);  

                        fn(classes, index, value);  
                        self.className = classes.join(" ");  
                    };  
                }  

                var ret = {  
                    add: update(function(classes, index, value) {  
                        ~index || classes.push(value);  
                    }),  
                    remove: update(function(classes, index) {  
                        ~index && classes.splice(index, 1);  
                    }),  
                    toggle: update(function(classes, index, value) {  
                        ~index ? classes.splice(index, 1) : classes.push(value);  
                    }),  
                    contains: function(value) {  
                        return !!~self.className.split(/\s+/).indexOf(value);  
                    },  
                    item: function(i) {  
                        return self.className.split(/\s+/)[i] || null;  
                    }  
                };  

                Object.defineProperty(ret, 'length', {  
                    get: function() {  
                        return self.className.split(/\s+/).length;  
                    }  
                });  

                return ret;  
            }  
        });  
    }  
})(document);
  • Reinhardt

    这个问题解决了吗?用这个临时方案有没有其他问题?

    2017-08-10 21:05

猫猫猫猫

猫猫猫猫 - 用户已离线

是的,iOS注入js文件是存在问题,试试evalJs吧。
你是离线打包的吗?我记得这个bug是很早的版本就存在了的。

  • (作者)

    不是离线打包。不过这个问题是更新了新版本才发现的,可能是之前都只是测试了安卓的打包版本,IOS只测试了真机调试版本吧,才没发现有这个问题,不过现在是调试版本也有这个问题了。

    2016-12-20 11:28

  • (作者)

    请问如是用evalJs,那要怎么把mui注入到webview呢?

    2016-12-20 11:36

  • 猫猫猫猫

    统统转为字符串

    2016-12-20 11:48

Jauns

Jauns

appendJsFile,偶尔有问题。
关注一下问题

rexcloud

rexcloud

同样发现这个bug,ios下,真机测试没问题,打包就出问题。

h***@126.com

h***@126.com

1.8.2.20190401,这个bug还没有解决,真的服了,这个团队到底是几个人啊,在考虑要不要用这个框架做下去

该问题目前已经被锁定, 无法添加新回复