Откыть libreoffice из firefox webExtension

370
10 сентября 2017, 03:08

Приветствую!

Есть проблема с webExtension в firefox. По идее всё отлично работает, только вот я не могу передать нужные мне данные в офис. sendNativeMessage() по мануалу сказано, что передаёт сообщение внешней программе, в моём случае должен открыться libreoffice с сообщением: "message!". А в итоге получаю как на картинке ниже. т.е. он выводит openoffice.json, а не то сообщение что мне нужно. Буду рад любой помощи!)

P.S. то что закомментированно в script.js - так можно было пускать офис в старом API extensions firefox.

background.js:

function onResponse(response) {
    console.log(`Received ${response}`);
}
function onError(error) {
    console.log(`Error: ${error}`);
}
function connected(p) {
   console.log('connected');
   browser.runtime.sendNativeMessage("openoffice", {message:"message!"})
     .then(onResponse, onError);
}
browser.runtime.onConnect.addListener(connected);

script.js:

function onError(error) {
  console.log(`Error: ${error}`);
}
function onGot(item) {
  var color = "blue";
  if (item.color) {
     color = item.color;
  }
  document.body.style.border = "10px solid " + color;
}
var getting = browser.storage.local.get("color");
getting.then(onGot, onError);
function action(event) {
  findOOo(event);
  browser.runtime.onMessage.removeListener(action);
}
function findOOo(event) {
  event.target.innerHTML = "link name is changed";
  // let port = browser.runtime.connectNative("C:\\Program Files\\LibreOffice 5\\program\\soffice.exe");
  var myPort = browser.runtime.connect({name:"port-from-cs"});
  // var file = Components.classes["@mozilla.org/file/local;1"].getService(Components.interfaces.nsILocalFile);
 // var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
 // var soffice = "C:\\Program Files\\LibreOffice 5\\program\\soffice.exe";
 // file.initWithPath(soffice);
 // process.init(file);
 // var args = [event.target.href];
 // process.run(false, args, args.length);
 // event.stopPropagation();
 // return false;
}
function hasClass(elem, className) {
  return /.*OOo.*/.test(elem.className);
}
document.addEventListener("click", function(event) {
  if (hasClass(event.target)) {
     action(event);
  }
});

manifest.json:

{
  "manifest_version": 2,
  "name": "OpenOffice for I.Q.P.H.A.R.M",
  "description": "Allows to edit OpenOffice docs with help webdav protocol",
  "version": "1.0",
  "applications": {
    "gecko": {
       "id": "openoffice@goodsoft.com",
       "strict_min_version": "50.0"
    }
  },
  "icons": {
    "48": "icons/icon.png"
  },
  "background": {
    "scripts": ["content_scripts/background.js"]
  },
  "content_scripts": [{
    "matches": ["<all_urls>"],
    "js": ["content_scripts/script.js"]
  }],
  "options_ui": {
    "page": "settings/options.html"
  },
  "permissions": [
    "storage",
    "nativeMessaging",
   "tabs",
   "activeTab"
  ]
}

openoffice.json(добавлен в реестр):

{
  "name": "openoffice",
  "description": "Connector to local editor openoffice for downloaded file",
  "path": "C:\\Program Files\\LibreOffice 5\\program\\soffice.exe",
  "type": "stdio",
  "allowed_extensions": ["openoffice@goodsoft.com"]
}

READ ALSO
Передача методов через postmessage

Передача методов через postmessage

Дан страничка и фрейм На страничке есть кнопка которая отправляет некий конфиг фрейму

360
Как нажать на кнопку перелистывания и чтобы листались 2 карусели?

Как нажать на кнопку перелистывания и чтобы листались 2 карусели?

Вот есть 2 карусели: https://jsfiddlenet/hhnq8a26/1/ Как сделать так, чтобы при нажатии на кнопку prev(крассный фон) одной из них перелистывались сразу обе...

623
Каким образом получить id при клике?

Каким образом получить id при клике?

ЗдравствуйтеЕсть ссылки вида:

375