为orsay设置的Toast构建不起作用

时间:2017-06-10 09:28:07

标签: cordova samsung-smart-tv television

我使用TOAST项目为智能电视创建了一个应用程序。在开发过程中,我使用tizen模拟器和tizen studio测试所有内容,一切都很好。

完成开发后,我试图在orsay TV和orsay模拟器上运行该应用程序,不幸的是在该平台上存在很多问题。我修复了设计中的一些问题,但我无法解决主要问题。

当我运行应用程序时,控制台中有一行说:deviceready has not fired after 5 seconds。我无法使用任何TOAST api功能。

我创建了一个空项目,并完全按照此页面的说法进行操作:https://github.com/Samsung/cordova-plugin-toast#prepare-to-start

但我又得到了同样的错误。请帮帮我。

这是日志:

cordova/platform: orsay bootstrap BEGIN cordova.js:1365 adding proxy for NetworkStatus cordova.js:887 adding proxy for Console cordova.js:887 adding proxy for Device cordova.js:887 adding proxy for Globalization cordova.js:887 cordova/platform: orsay bootstrap END cordova.js:1460 adding proxy for toast.inputdevice cordova.js:1880 return Window cordova.js:1880 adding proxy for toast.tvwindow cordova.js:1880 return Window cordova.js:1880 adding proxy for toast.tvchannel cordova.js:1880 adding proxy for toast.tvaudiocontrol cordova.js:1880 adding proxy for toast.drminfo cordova.js:1880 adding proxy for toast.application cordova.js:1880 adding proxy for toast.Media cordova.js:1880 Failed to load resource: fail to read a resource form decryptied file file:///home/smarttv/Apps/xThreeApp/cordova_plugins.js deviceready has not fired after 5 seconds. cordova.js:1880 Channel not fired: onNativeReady cordova.js:1880 Channel not fired: onCordovaReady cordova.js:1880 Channel not fired: onCordovaConnectionReady cordova.js:1880 Channel not fired: onCordovaInfoReady cordova.js:1880

enter image description here

更新

好的,我发现了两件事:

  • 当我使用Debug As/Samsung Smart Tv Emulator在模拟器上运行应用程序devicereaday赢了但是如果我在模拟器中关闭应用程序并再次从模拟器中的应用程序页面打开它, deviceready活动将完美无缺
  • 即使有了上述技巧,当我导航到第二页时,deviceready再次无法解雇! (即使我尝试导航到当前页面,但第二次尝试将无法触发deviceready事件)

我尝试了很多方法来导航到第二页,但都有相同的结果。 (我使用的方法有window.location.href = url;window.location.replace(url);以及......)

1 个答案:

答案 0 :(得分:1)

好的我回答自己,这是cordova.js中的一个错误

要解决此问题,您可以将bootstrap函数更改为cordova.js中的以下源代码:

bootstrap: function() {
    console.log('cordova/platform: orsay bootstrap BEGIN');

    var modulemapper = require('cordova/modulemapper');
    var channel = require('cordova/channel');
    var SEF = require('cordova/plugin/SEF');
    var isWebapisLoaded = false;
    var isOnShowEventFire = false;

    modulemapper.clobbers('cordova/exec/proxy', 'cordova.commandProxy');

    var fireNativeReadyEvent = function() {
        if(isWebapisLoaded && isOnShowEventFire) {
            channel.onNativeReady.fire();
        }
    };

    for (var k in define.moduleMap) {
        if (/cordova.*\/proxy/.exec(k)) {
            require(k);
        }
        if (/cordova.*\/symbols/.exec(k)) {
            require(k);
        }
    }

    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = '$MANAGER_WIDGET/Common/webapi/1.0/webapis.js';
    script.onload = function() {
        isWebapisLoaded = true;
        fireNativeReadyEvent();
        require('cordova/plugin/ime-via-input');
    };
    head.appendChild(script);

    window.onPause = function () {
        channel.onPause.fire();
    };

    window.onResume = function () {
        channel.onResume.fire();
    };

    window.onHide = function() {
        localStorage.clear();
    };

    window.addEventListener('load', function () {
        var AppCommonPlugin = null;
        var NNaviPlugin = null;

        window.onShow = function () {
            localStorage.setItem('showEventFlag', 'true');
            settingInfo();
        };

        if(localStorage.getItem('showEventFlag') == 'true') {
            settingInfo();
        }

        if(window.curWidget && typeof window.curWidget.setPreference == 'function') {
            console.log('window.curWidget');
            window.curWidget.setPreference('ready', 'true');
        }
    });

    window.addEventListener('unload', function () {
        SEF.close();
    });

    window.addEventListener('keydown', function (e) {
        switch(e.keyCode) {
            case 88: // RETURN key
                // default action disabled.
                // Calling 'setPreference('return', 'true')' is needed explicitly to exit the application
                e.preventDefault();
                break;
            case 45: // EXIT key
                // NOTHING to prevent.
                break;
        }
    });

    function settingInfo() {
        try {
            AppCommonPlugin = SEF.get('AppCommon');
        }
        catch(e) {
            Error(e);
        }
        AppCommonPlugin.Execute('UnregisterAllKey');
        AppCommonPlugin.Execute('RegisterKey',29460); //up
        AppCommonPlugin.Execute('RegisterKey',29461); //down
        AppCommonPlugin.Execute('RegisterKey',4); //left
        AppCommonPlugin.Execute('RegisterKey',5); //right
        AppCommonPlugin.Execute('RegisterKey',29443); //enter
        AppCommonPlugin.Execute('RegisterKey',88); // return

        try {
            NNaviPlugin = SEF.get('NNavi');
        }
        catch(e) {
            Error(e);
        }

        NNaviPlugin.Execute('SetBannerState',2);
        isOnShowEventFire = true;
        fireNativeReadyEvent();
    }

    // End of bootstrap
    console.log('cordova/platform: orsay bootstrap END');
}