I am facing problems using embedded webextension. I am following this tutorial Embedded WebExtensions.
I have the following files:
- testHybridv2[directory]
-index.js
-package.json
-webextension[directory]
-borderify [directory]
- manifest.json
- borderify.js
-icons
I am following the tutorial to embed a webextension inside the legacy SDK addon. I have these files:
First, package.json
(this line: "hasEmbeddedWebExtension": true
, causes an error. When I remove it, the legacy addon runs ok without errors. But I need to embed webextension in it.
{
"title": "My Jetpack Addon",
"name": "testhybridv2",
"version": "0.0.1",
"description": "A basic add-on",
"main": "index.js",
"author": "",
"engines": {
"firefox": ">=38.0a1",
"fennec": ">=38.0a1"
},
"license": "MIT",
"hasEmbeddedWebExtension": true,
"keywords": [
"jetpack"
]
}
Second, index.js
contains:
const webExtension = require("sdk/webextension");
console.log("inside sdk embedding");
Third, inside the webextension
directory, borderify.js
contains this line:
document.body.style.border = "5px solid red";
manifest.json
contains this:
{
"manifest_version": 2,
"name": "Borderify",
"version": "1.0",
"description": "Adds a red border to all webpages matching mozilla.org.",
"icons": {
"48": "icons/border-48.png"
},
"content_scripts": [
{
"matches": ["*://*.mozilla.org/*"],
"js": ["borderify.js"]
}
]
}
When I run the SDK using jpm
using the above files content, I get this error and I do not see the extension in the browser knowing that I am using FF Nightly edition with turned off signature requirement :
C:\Users\myuser\Documents\dev\testHybridv2>jpm run -b "C:\Program Files (x86)\Firefox Developer Edition\firefox.exe" --binary-args -jsconsole --no-copy --debug
JPM [info] Starting jpm run on My Jetpack Addon
JPM [info] Creating a new profile
1497255404231 addons.xpi-utils WARN addMetadata: Add-on @testhybridv2 is invalid: [Exception... "Failed to open input source 'jar:file:///C:/Users/e/AppData/Local/Temp/75500c73-cb46-4c84-ad11-33b93e9bf530/extensions/@testhybridv2.xpi!/webextension/manifest.json'" nsresult: "0x80520012 (NS_ERROR_FILE_NOT_FOUND)" location: "JS frame :: resource://gre/modules/Extension.jsm :: readJSON/< :: line 349" data: yes] Stack trace: readJSON/<()@resource://gre/modules/Extension.jsm:349 < readJSON()@resource://gre/modules/Extension.jsm:346 < readManifest()@resource://gre/modules/Extension.jsm:410 < loadManifestFromWebManifest<()@resource://gre/modules/addons/XPIProvider.jsm:966 < TaskImpl_run()@resource://gre/modules/Task.jsm:319 < TaskImpl()@resource://gre/modules/Task.jsm:277 < asyncFunction()@resource://gre/modules/Task.jsm:252 < loadManifestFromRDF<()@resource://gre/modules/addons/XPIProvider.jsm:1234 < TaskImpl_run()@resource://gre/modules/Task.jsm:319 < TaskImpl()@resource://gre/modules/Task.jsm:277 < asyncFunction()@resource://gre/modules/Task.jsm:252 < loadFromRDF()@resource://gre/modules/addons/XPIProvider.jsm:1510 < TaskImpl_run()@resource://gre/modules/Task.jsm:319 < TaskImpl()@resource://gre/modules/Task.jsm:277 < asyncFunction()@resource://gre/modules/Task.jsm:252 < Task_spawn()@resource://gre/modules/Task.jsm:166 < TaskImpl_handleResultValue()@resource://gre/modules/Task.jsm:389 < TaskImpl_run()@resource://gre/modules/Task.jsm:327 < TaskImpl()@resource://gre/modules/Task.jsm:277 < asyncFunction()@resource://gre/modules/Task.jsm:252 < loadManifestFromZipFile<()@resource://gre/modules/addons/XPIProvider.jsm:1597 < TaskImpl_run()@resource://gre/modules/Task.jsm:319 < TaskImpl()@resource://gre/modules/Task.jsm:277 < asyncFunction()@resource://gre/modules/Task.jsm:252 < loadManifestFromFile()@resource://gre/modules/addons/XPIProvider.jsm:1606 < syncLoadManifestFromFile()@resource://gre/modules/addons/XPIProvider.jsm:1618 < addMetadata()@resource://gre/modules/addons/XPIProvider.jsm -> resource://gre/modules/addons/XPIProviderUtils.js:1613 < processFileChanges()@resource://gre/modules/addons/XPIProvider.jsm -> resource://gre/modules/addons/XPIProviderUtils.js:2001 < checkForChanges()@resource://gre/modules/addons/XPIProvider.jsm:3793 < startup()@resource://gre/modules/addons/XPIProvider.jsm:2826 < callProvider()@resource://gre/modules/AddonManager.jsm:272 < _startProvider()@resource://gre/modules/AddonManager.jsm:759 < startup()@resource://gre/modules/AddonManager.jsm:941 < startup()@resource://gre/modules/AddonManager.jsm:3145 < observe()@resource://gre/components/addonManager.js:65
When I remove this line from manifest.json
, the legacy addon runs well and I see it in the browser extensions:
“hasEmbeddedWebExtension”: true,