I create an application for smart tvs with TOAST project. During the development I test everything with tizen emulator and tizen studio and everything was fine.
After finishing development I tried to run the application on both orsay TV and orsay emulator and unfortunatly there was a lots of issue in that platform. I fixed some issues in design but I can't fix the main issue.
When I run the application, There is a line in console that say : deviceready has not fired after 5 seconds
. And I can't use any of the TOAST api functionalities.
I create an empty project and do exactly what this page say: https://github.com/Samsung/cordova-plugin-toast#prepare-to-start
But again I got the same error. Please help me.
Here is the log:
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
UPDATE:
Ok I just find out two things:
Debug As/Samsung Smart Tv Emulator
the devicereaday
won't fired but if I close the app in the emulator and and open it again from the app page in emulator, the deviceready
event will work perfectdeviceready
again won't fire! (Even I tried to navigate to the current page but second attamp will fail to fire the deviceready
event)I tried lots of method to navigating to the second page but all have the same result. (I use methods like window.location.href = url;
and window.location.replace(url);
and ...)
OK I answer to myself, It was a bug in cordova.js
To fix this issue, you can change the bootstrap function to the following source code in 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');
}