Firefox addon sdk packaging - firefox-addon

I packaged my addon and tested in firefox 31 , it worked fine.
I try to install it on firefox 21 , I got an error mentioning invalid package addon/sdk/window
my question is how could i include packages so that it could work on firefox 21?
Any ideas?
Thanks

I dont think that will be supported, as firefox is improving day by day, and changes in the version of SDKs also.
Also, the firefox v21, must not be supporting the SDK packed addons. You should create them using XUL.

cfx has the option --force-use-bundled-sdk to bundle the sdk libraries themselves with the XPI, but that doesn't guarantee that those modules will work in older firefox versions
You could also wrap the module require() in try-catch blocks and use older APIs on failure. I think some modules were renamed over time
Also, FF21 is long out of support. At the time of writing 31.4.0esr is the oldest still maintained release.

Related

VS2019+WDK10, missing Spectre-mitigated MSVC library for 16.11, why?

Some weird stuff here. I'm trying to build a KMDF sample driver with VS2019 16.11.5 and WDK 10.0.19041.685 (also called version 2004 Dec 2020 update).
First, I got compilation error saying that I need to download Spectre-mitigated MSVC library.
Well, I try it, but got a new problem. The VS2019(16.11.5) installer does not show MSVC Spectre-mitigated MSVC library version for exact 16.11. Looks like the latest one it provides is 16.10 (🙁).
Download the 16.10 one and resume trying, still compilation error.
I peek into my D:\VSIDE\VS2019\VC\Tools\MSVC folder, and see two versions of MSVC libs listed, 14.29.30133 and 14.29.30037 . The later is the one with spectre libs(so it's 600MB+ larger).
However, the KMDF build tool insists to find MSVC libs in the newer 14.29.30133 folder, so Spectre-mitigated libs still CANNOT be found.
I know I can manually copy the required files from 14.29.30037 to 14.29.30133 to make things go on. BUT is it the decent way to do so, or is it a Microsoft toolset bug?
I'd like to ask how other kernel driver developers solve this issue. Thank you.
Well, several days later, I find out two workarounds for this issue.
First, as Hans Passant stated, disable the Spectre lib in .vcxproj. This can be configured from UI.
Second, explicitly select a MSVC library version for current project. This can also be configured in project settings UI.
==== 2022.02.11 UPDATE ====
Finally got it,the Spectre-lib with version number 14.29.30133 is called "(Latest)", so it is listed above the oldest version, and this defeats the novice. Use this and problem solved.
Sure, it is stupid enough to mark it as merely "(Lastest)". He should have named it MSVC v142 - VS2019 C++ x64/x86 Spectre-mitigated libs (v14.29-16.11)(Latest)" .

DirectX Install Directory

So, I tried installing Microsoft DirectX 2010, when I was setting the directory of in the installer I put it to the wrong directory that I wanted it in. Now, every time I open the installer, it doesn't give me an option to change the directory, it just says continue and install. If anyone has a solution to this that would be really nice.
EDIT: Also forgot to note that when I installed it on my D: drive (its supposed to be on C: ) I get the error code S1023
The S1023 issue is detailed in this post. Because the setup just outright failed, and it's built on ancient pre-MSI technology, you need to clean out the old installation manually.
Delete the failed install directory
Using regedit to delete HKCU\Software\Microsoft\DirectX SDK, HKLM\Software\Microsoft\DirectX SDK. If you are on a x64 system (which I hope you are), also delete HKLM\SOFTWARE\WOW6432Node\Microsoft\DirectX SDK.
Edit your system environment variables and remove the entry for DXSDK_DIR.
The DirectX SDK is deprecated. If you are using VS 2012 or later -or- the Windows 8.0 SDK or later, and you are using DirectX 11 or DirectX 12, then you don't need it. See Microsoft Docs.
There are a few cases where it's still legitimate to use the legacy DirectX SDK as covered in The Zombie DirectX SDK, but for the most part you should avoid using it for new projects.
If you are trying to get an old game to work, try installing the latest DXSETUP/DXWSETUP but keep in mind that it doesn't actually install DirectX at all. See Not So Direct Setup
UPDATE: There are now really no reasons to use the legacy DirectX SDK at all. See Where is the DirectX SDK (2021 Edition)? for the overall status and details.
For legacy D3DX9/D3DX10/D3DX11, use the Microsoft.DXSDK.D3DX NuGet package per this blog post. No need for the legacy DirectX SDK or to use legacy DXSETUP for this solution.
For XAudio2 on Windows 7, use the Microsoft.XAudio2.Redist NuGet package per Microsoft Docs.

Questions on backwards compatibility of Firefox Addons/Extensions

Background info:
Over the past week, I have been messing around with Chrome extensions and had no problem creating my extension. Great, Chrome rocks for making the development process very easy to learn, and, well... just easy!
Now I have it in my mind that I'd like to create this extension for as many browsers as I can, so I decided on Firefox next.
What a mess! There documentation has done nothing but give me a headache and waste my time so far, VERY convoluted and just generally unorganized.
I have managed to locate a code sample for a simple extension that I think I can use as a starting point and have begun messing around with - fine...
I have learned that this sample extension will not work with anything less than Firefox 4, as it uses the bootstrap technique to make the extension installable without a browser restart. Ughhhhhh....
Now we arrive at my questions:
Is it possible to develop an extension for Firefox 7 that will work with previous versions of Firefox? I don't even care about anything prior to Firefox 4, if that's the cutoff point for restart-less installations. It would be nice to know that what I am spending all this time making will work consistently and for more than a week when the user is prompted to upgrade next.
How about the reverse? Can I create an extension that is compatible with Firefox 3.5 through Firefox 7? I realize it would require a restart to install, but that would be acceptable if it resulted in a working extension regardless of the version.
Can anyone with experience on this stuff share a bit of what I'm getting myself into here? It seems like this is a nightmare of a platform to develop on, and that I will be constantly fixing my extension.
One last piece of relevant information:
The extension I am developing is purely javascript based - this stuff should work (I think?) because it's dependent on just one feature "content scripts" that really shouldn't be changing in implementation between versions at this point... right?
So what exactly am I missing? How do you create easily manageable Firefox extensions that will work in all versions of the browser?
Thanks everyone! :)
You have to distinguish between "traditional" extensions and extensions built with the Add-on SDK. The former are far more powerful given that they have direct access to all APIs the browser uses - but that's also the reason why they are more complicated to write and why the documentation is rather unordered (there are simply very many things that you could do, far more than you could with Chrome). They are also more likely to break as the browser changes. The Add-on SDK on the other hand gives you a limited API much like Chrome. The Add-on SDK currently supports everything from Firefox 4 onwards (yes, because of restartless installation), with the promise that browser changes will merely require your add-on to be recompiled with a newer version of the Add-on SDK. In fact, that recompiling will likely happen automatically in future for add-ons hosted on addons.mozilla.org. On to your questions:
Is it possible to develop an extension for Firefox 7 that will work with previous versions of Firefox?
Sure it is. The Add-on SDK currently marks your add-on as compatible with anything between Firefox 4 Beta 7 and Firefox 8 Alpha 1. Even as traditional add-ons go - starting with Firefox 4 the differences between particular browser versions are rather small, most things work in all of them. You can also stay compatible with Firefox 3.x but depending on what you do it might require some effort. Important information:
Firefox 4 for developers
Firefox 5 for developers
Firefox 6 for developers
Firefox 7 for developers
How about the reverse? Can I create an extension that is compatible with Firefox 3.5 through Firefox 7?
It doesn't matter which way you go. I wouldn't recommend spending much time on Firefox 3.x support however. With Firefox 3.5 no longer supported the only relevant version is Firefox 3.6. According to the statistics of my add-ons roughly 18% of the Firefox users continue using it. In the next few months this percentage will get significantly smaller, especially when Mozilla announces end-of-life for this branch. So for a new add-on supporting it is usually not justified.
Can anyone with experience on this stuff share a bit of what I'm getting myself into here?
Depends on how complicated your add-on will be. Given that you are developing an equivalent to a Chrome extension, you will most likely be using the Add-on SDK which means that there won't be any compatibility problems. As traditional add-ons go, simple add-ons that don't rely on some obscure implementation details also typically don't have any trouble staying compatible (I have two add-ons that didn't need a single adjustment since Firefox 3.5). Add-ons that go deep down into the system are more problematic of course.

Selenium-webdriver 0.1.4 broken with Firefox 5

I'm having kind of a big problem that I need to solve pretty quickly, but I'm just not sure how.
Right now I've got an app that's stuck using the selenium-webdriver gem at v0.1.4. I'm using Ubuntu 10.10 and the Firefox Stable PPA. A few nights ago, Firefox forced their new v5.0, and now the Webdriver extension in Firefox is broken. That basically means that when I run Cucumber tests, Firefox will launch, but it won't be able to do anything, since the Webdriver is disabled.
Now, I've been watching for days, and it looks like the folks over at Selenium have updated their 0.2.x release to be compatible with Firefox 5. But I'm hesitant to upgrade what appears to be a significant version increase. I've tried downloading Firefox-4.0 from the FF website, but from what I can tell they just sneak it in as FF5 (every time I launch FF4 directly, it still launches FF5). I've also tried to use the Force Version feature in Synaptic, but FF4 isn't available there either.
I either need to find a hack to fix webdriver 0.1.4 or downgrade to FF4. Does anyone have any advice?
====================================
Edit: Some of the above was written in frustration amid a number of dependency issues, and a lot of it was from my own misunderstanding. I meant no offense, and am kicking myself for not seeing was staring me right in the face. I've toned down my rant. Selenium and Firefox are solid products, and I'm just glad I got them working again.
Solved the problem by just upgrading to >= 0.2.2. I thought the version jump from 0.1.x to 0.2.x indicated potential compatibility issues that I wasn't prepared to deal with at the time.
There's a post here by a user named jarra that appears to have directions for installing FF4 back to the mac and then forcing selenium to use FF4.
Do you mean that the extension was disabled due to incompatibility?
Then you can force compatibility by adding the entry extensions.checkcompatibility.5.0 to about:config, with value false. Restart Firefox. If the addon remains disabled, install MR Tech's Toolkit addon, restart Firefox, right-click on the addon, "enable incompatible addon" (or something else). After restarting, Webdriver should work fine.

Native NPAPI plugin isn't loaded by Firefox Beta 4

I've been scratching my head over this for the last few days and neither me nor Google have come up with a good solution.
I have a native NPAPI plugin that works fine for Firefox 3.6. It simply consists of a single np*.dll, nothing else.
Now I'm upgrading it to Firefox 4 Beta. I've changed the install.rdf to include the new em:unpack directive (XPIs were automatically unpacked in Pre-4) and even added a new chrome.manifest with the (supposedly) now required 'binary-component' statement (according to https://developer.mozilla.org/en/XPCOM/XPCOM_changes_in_Gecko_2.0: 'Prior to Gecko 2, during component registration, all binary and JavaScript component files were loaded and called, asking them to register themselves').
The problem is: The plugin downloads and supposedly installs. But then while it shows up in the AddOn manager it doesn't show up in 'about:plugins' and is of course not usable either. I ran Firefox with extension logging enabled but nothing really useful regarding the plugin showed up there either..
Basically I'm stumped - any help please?
Phew - turns out I found the cause of the problem: the np*.dll was in the root folder inside the XPI, not in the plugins/ folder as it's supposed to be. FF3.6 was more forgiving it seems, FF4 only loads a NPAPI DLL if the DLL is actually inside the plugins folder...
Problem solved :-)

Resources