2017-01-09 6 views
0

Я пытаюсь проверить, установлено ли приложение 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.'); 
    }, 
+0

Просьба уточнить вашу конкретную проблему или добавить дополнительные сведения, чтобы точно указать, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. См. Страницу [ask] для выяснения этого вопроса. – Makyen

+0

Когда собственный хост не установлен или запись в реестре не завершена, а затем, если я попытаюсь подключиться к веб-расширению (часть js) к встроенному приложению, это дает мне ошибку в веб-консоли, что «Нет такого родного приложения», что правильно, я хочу проверить то же самое в моем js-коде, независимо от того, установлено ли собственное приложение или нет. Если есть способ, чтобы я мог получить сообщение в ответ или в исключениях? – rohan

+0

Тогда это звучит так, как нам нужно, чтобы увидеть ваш код. Мой следующий комментарий будет кратким описанием того, что необходимо. Это может показаться много, но нам нужно понять, что происходит, и почему вы не ошибаетесь. Хотя это, как правило, необходимо, сначала попробуйте его без родного приложения (или выберите общую (не существующую?) Программу, которая приведет к тому же самому). – Makyen

ответ

0

Проблема здесь в том, что port.error не дает никакого ответа ошибки в Firefox версии меньше, чем 52, благодаря которой я столкнулся проблемой при определении, установлена ​​ли родное приложение или не.

После обсуждения Mozilla сообщества (https://discourse.mozilla-community.org/t/firefox-native-messaging-runtime-lasterror-not-giving-any-errors-in-case-of-no-native-application-installed-on-connectnative/12880/4), мы обнаружили, что на самом деле упущен и ошибка уже сообщалось: https://bugzilla.mozilla.org/show_bug.cgi?id=12994116 , которые будут решены в Firefox 52.

Однако, мне нужно поддерживать Firefox 50 также , поэтому альтернативный вариант, который я использую, - это вызвать собственное приложение, чтобы узнать, установлено ли оно или нет.

Если я получил ответ, который был установлен в противном случае, это не так. Однако конкретные сообщения об ошибках будут доступны из Firefox52.

Смежные вопросы