Я пытаюсь проверить, установлено ли приложение Native или нет. Если это не так, я должен пригласить пользователя загрузить его из веб-страницу. Для хром, который я использовал, проверяя сообщения об ошибках из runtime.LastError. Однако в случае Firefox он дает ошибку только в консоли Нет такого родного приложения extension_name и не поймать его в методе runtime.LastError.Firefox Native Messaging runtime.LastError не дает никаких ошибок в случае отсутствия собственного приложения, установленного на Connectnative
Есть ли способ определить, установлено ли соответствующее приложение Native или нет? Я столкнулся с проблемой, когда приложение Native не установлено, и browser.runtime.lastError не дает никаких ошибок.
Можете ли вы предложить, если в Firefox Webextension есть какой-либо способ, чтобы мы могли поймать такие ошибки и идентифицировать его в коде, независимо от того, установлено ли соответствующее пользовательское приложение или нет на компьютере пользователя.
Это действительно поможет, если кто-то может предоставить некоторую информацию об этом.
, например. :
startNativeApp: function(force){
// note that when the native app is opened and ready, it will call "_ABC_onAgentReady"
ABC.log('Starting native app.');
if (!ABC.appConnected) {
try {
ABC.nativeAppPort = browser.runtime.connectNative(_ABC_native_app_id);
ABC.nativeAppPort.onMessage.addListener(ABC.onNativeMessageReceived);
ABC.nativeAppPort.onDisconnect.addListener(ABC.onNativeAppDisconnected);
ABC.appInstalled = true;
ABC.appConnected = true;
} catch(e) {
ABC.log('Error starting native app: ' + e.message, 'ERR');
}
} else if (force === true) {
ABC.log('Native app is already running; attempting to stop and will restart in 750ms.');
ABC.stopNativeApp();
setTimeout(function() { ABC.startNativeApp(true); }, 750);
}
},
onNativeAppDisconnected: function(message) {
console.log("ABC LastError : "+browser.runtime.lastError);
console.log("ABC LastError : "+ABC.nativeAppPort.error);
console.log("ABC LastError : "+JSON.stringify(message));
ABC.appConnected = false;
ABC.nativeAppPort = null;
ABC.appInstalled = false;
if (browser.runtime.lastError && (browser.runtime.lastError.message.indexOf("No such native application") !== -1)) {
ABC.appInstalled = false;
}
// cleanup: reset the sig data so that it is re-requested on the next scan
_ABC_sa_data = "";
_ABC_sigs = "";
if (browser.storage && browser.storage.local) {
browser.storage.local.set({ uid: _ABC_be_uid }, null);
}
ABC.log('Send message to page to stop.');
ABC.sendMessageToPage({ onNativeAppDisconnected: '' });
ABC.log('Native app disconnected.');
},
Просьба уточнить вашу конкретную проблему или добавить дополнительные сведения, чтобы точно указать, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. См. Страницу [ask] для выяснения этого вопроса. – Makyen
Когда собственный хост не установлен или запись в реестре не завершена, а затем, если я попытаюсь подключиться к веб-расширению (часть js) к встроенному приложению, это дает мне ошибку в веб-консоли, что «Нет такого родного приложения», что правильно, я хочу проверить то же самое в моем js-коде, независимо от того, установлено ли собственное приложение или нет. Если есть способ, чтобы я мог получить сообщение в ответ или в исключениях? – rohan
Тогда это звучит так, как нам нужно, чтобы увидеть ваш код. Мой следующий комментарий будет кратким описанием того, что необходимо. Это может показаться много, но нам нужно понять, что происходит, и почему вы не ошибаетесь. Хотя это, как правило, необходимо, сначала попробуйте его без родного приложения (или выберите общую (не существующую?) Программу, которая приведет к тому же самому). – Makyen