Addon-sdk-1.7 "toolbar-api" example not working on computer

I don’t get this error on all computers, but my addon has similar functionality to this example and I have received complaints from a few people that my addon doesn’t work on their computer. I have had limited access to their computers in the past, so I could see the error, but I couldn’t spend much time trying to debug it.

I finally found a computer that I have access to and so I am trying to figure out the fix or workaround. The computer that I found that reproduces this error is a public computer that erases all external installations on a daily basis, so there isn’t much software on it that could interfere with it, and other addon functionality and examples work, just not ones involving a frame. I also have to install firefox, the sdk, and python each time I do anything on the computer, so I am using the latest versions of each and with a clean slate, and this error is coming up when I am using a “cfx run”. This computer is a HP ENVY 27 running windows 8.

The example code is as follows:
main.js

"use strict";
const { Toolbar } = require("sdk/ui/toolbar");
const { Frame } = require("sdk/ui/frame");
const { ActionButton } = require("sdk/ui/button/action");
let button = new ActionButton({
  id: "button",
  label: "send!",
  icon: "./favicon.ico",
  onClick: () => {
    frame.postMessage({
      hello: "content"
    });
  }
});
let frame = new Frame({
    url: "./index.html",
    onAttach: () => {
      console.log("frame was attached");
    },
    onReady: () => {
      console.log("frame document was loaded");
    },
    onLoad: () => {
      console.log("frame load complete");
    },
    onMessage: (event) => {
      console.log("got message from frame content", event);
      if (event.data === "ping!")
        event.source.postMessage("pong!", event.source.origin);
    }
});
let toolbar = new Toolbar({
  items: [frame],
  title: "Addon Demo",
  hidden: false,
  onShow: () => {
    console.log("toolbar was shown");
  },
  onHide: () => {
    console.log("toolbar was hidden");
  }
});

index.html

<html>
  <body>
    <button id=post>post!</button>
  </body>
  <script>
    window.addEventListener("message", event => {
      console.log("Document message", event, event.data, event.source !== window && event.source === window.parent);
    });
    window.addEventListener("click", event => {
      if (event.target.id === "post") {
          console.log("click!")
          window.parent.postMessage("ping!", "*");
      }
    });
    console.log(window.parent === window)
  </script>
</html>

console error:

console.error: toolbar-api:
  Message: TypeError: can't convert null to object
  Stack:
    calculate@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gr
e/modules/commonjs/diffpatcher/diff.js:24:3
calculate/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/
modules/commonjs/diffpatcher/diff.js:36:17
calculate@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/mo
dules/commonjs/diffpatcher/diff.js:29:3
calculate/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/
modules/commonjs/diffpatcher/diff.js:36:17
calculate@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/mo
dules/commonjs/diffpatcher/diff.js:29:3
calculate/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/
modules/commonjs/diffpatcher/diff.js:36:17
calculate@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/mo
dules/commonjs/diffpatcher/diff.js:29:3
@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/com
monjs/diffpatcher/diff.js:18:10
dispatch@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/mod
ules/commonjs/method/core.js:119:12
reactor<.onStep@resource://gre/modules/commonjs/toolkit/loader.js -> resource://
gre/modules/commonjs/sdk/ui/frame/view.js:130:19
Reactor.prototype.onNext@resource://gre/modules/commonjs/toolkit/loader.js -> re
source://gre/modules/commonjs/sdk/event/utils.js:248:3
Reactor.prototype.run/<@resource://gre/modules/commonjs/toolkit/loader.js -> res
ource://gre/modules/commonjs/sdk/event/utils.js:251:32
emit@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules
/commonjs/sdk/event/core.js:97:9
receive@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modu
les/commonjs/sdk/event/utils.js:115:5
transform/next@resource://gre/modules/commonjs/toolkit/loader.js -> resource://g
re/modules/commonjs/sdk/event/utils.js:36:24
map/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/module
s/commonjs/sdk/event/utils.js:60:60
transform/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/
modules/commonjs/sdk/event/utils.js:43:29
emit@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules
/commonjs/sdk/event/core.js:97:9
receive@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modu
les/commonjs/sdk/event/utils.js:115:5
merges/</<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/m
odules/commonjs/sdk/event/utils.js:187:31
emit@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules
/commonjs/sdk/event/core.js:97:9
receive@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modu
les/commonjs/sdk/event/utils.js:115:5
lift/</<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/mod
ules/commonjs/sdk/event/utils.js:163:7
emit@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules
/commonjs/sdk/event/core.js:97:9
receive@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modu
les/commonjs/sdk/event/utils.js:115:5
transform/next@resource://gre/modules/commonjs/toolkit/loader.js -> resource://g
re/modules/commonjs/sdk/event/utils.js:36:24
filter/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/mod
ules/commonjs/sdk/event/utils.js:53:7
transform/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/
modules/commonjs/sdk/event/utils.js:43:29
emit@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules
/commonjs/sdk/event/core.js:97:9
receive@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modu
les/commonjs/sdk/event/utils.js:115:5
lift/</<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/mod
ules/commonjs/sdk/event/utils.js:163:7
emit@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules
/commonjs/sdk/event/core.js:97:9
receive@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modu
les/commonjs/sdk/event/utils.js:115:5
InputPort.prototype.observe@resource://gre/modules/commonjs/toolkit/loader.js ->
 resource://gre/modules/commonjs/sdk/input/system.js:100:5

console.error: toolbar-api:
  Message: TypeError: can't convert null to object
  Stack:
    calculate@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gr
e/modules/commonjs/diffpatcher/diff.js:24:3
calculate/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/
modules/commonjs/diffpatcher/diff.js:36:17
calculate@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/mo
dules/commonjs/diffpatcher/diff.js:29:3
calculate/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/
modules/commonjs/diffpatcher/diff.js:36:17
calculate@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/mo
dules/commonjs/diffpatcher/diff.js:29:3
calculate/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/
modules/commonjs/diffpatcher/diff.js:36:17
calculate@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/mo
dules/commonjs/diffpatcher/diff.js:29:3
@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/com
monjs/diffpatcher/diff.js:18:10
dispatch@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/mod
ules/commonjs/method/core.js:119:12
reactor<.onStep@resource://gre/modules/commonjs/toolkit/loader.js -> resource://
gre/modules/commonjs/sdk/ui/frame/model.js:127:19
Reactor.prototype.onNext@resource://gre/modules/commonjs/toolkit/loader.js -> re
source://gre/modules/commonjs/sdk/event/utils.js:248:3
Reactor.prototype.run/<@resource://gre/modules/commonjs/toolkit/loader.js -> res
ource://gre/modules/commonjs/sdk/event/utils.js:251:32
emit@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules
/commonjs/sdk/event/core.js:97:9
receive@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modu
les/commonjs/sdk/event/utils.js:115:5
transform/next@resource://gre/modules/commonjs/toolkit/loader.js -> resource://g
re/modules/commonjs/sdk/event/utils.js:36:24
map/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/module
s/commonjs/sdk/event/utils.js:60:60
transform/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/
modules/commonjs/sdk/event/utils.js:43:29
emit@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules
/commonjs/sdk/event/core.js:97:9
receive@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modu
les/commonjs/sdk/event/utils.js:115:5
merges/</<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/m
odules/commonjs/sdk/event/utils.js:187:31
emit@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules
/commonjs/sdk/event/core.js:97:9
receive@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modu
les/commonjs/sdk/event/utils.js:115:5
lift/</<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/mod
ules/commonjs/sdk/event/utils.js:163:7
emit@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules
/commonjs/sdk/event/core.js:97:9
receive@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modu
les/commonjs/sdk/event/utils.js:115:5
transform/next@resource://gre/modules/commonjs/toolkit/loader.js -> resource://g
re/modules/commonjs/sdk/event/utils.js:36:24
filter/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/mod
ules/commonjs/sdk/event/utils.js:53:7
transform/<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/
modules/commonjs/sdk/event/utils.js:43:29
emit@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules
/commonjs/sdk/event/core.js:97:9
receive@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modu
les/commonjs/sdk/event/utils.js:115:5
lift/</<@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/mod
ules/commonjs/sdk/event/utils.js:163:7
emit@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules
/commonjs/sdk/event/core.js:97:9
receive@resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modu
les/commonjs/sdk/event/utils.js:115:5
InputPort.prototype.observe@resource://gre/modules/commonjs/toolkit/loader.js ->
 resource://gre/modules/commonjs/sdk/input/system.js:100:5

The error seems to stem from the use of “sdk/ui/frame” inside a toolbar, as the example works if i modify the code to not include the frame. The toolbar with the frame will show up, but no communication between the frame and the main.js will work.

I am having same issue on windows 8? Have any suggestions?

My personal computer has windows 8 and I do not have this issue on that computer. Until I figure out a fix I am making a second version of my addon that uses a side panel instead of a toolbar as that doesn’t cause an error with a frame.

It sounds like a bug in the SDK, so I recommend that you file a bug report for it.

Ok, done!

I filed the bug, but haven’t heard back.

I think there might be a setting that the users have in their internet options that is propagating into firefox that is causing this problem. I haven’t confirmed this yet and am messing around with different configurations to try to figure it out.

Anyone else have any experience with this?

If this OS has touch enabled, can you disable touch screen from Device manager and re-try?

We ran into the same issue and disabling touch screen fixed this issue.

Thanks for the tip!

Disabling touch seemed to correct the problem on the computer that I have access to.

The first couple of computers that I encountered this bug were touchscreen computers, but I know we have had this issue on at least two non touchscreen computers as well. Although maybe the OS had touch enabled somehow (I do not have access to these anymore).

This is still a bug in my opinion if the work-around is to disable a major functionality of a computer, especially with more and more laptops coming out with this functionality.

Are SDK bugs still being addressed, since it will be phased out? I filed a bug for this several months ago and it seems it still hasn’t been investigated.

The team is looking into the SDK again starting this week. See the wiki page for details. Development will be focused on fixing major bugs and making sure the SDK works well with Multiprocess Firefox.