bob_flem
bob_flem

Reputation: 74

Firefox addon not always getting video src

I made trying to make my first addon but I have run into an issue. My addon is an addon to upload images and videos to a website. The images work fine, but with videos, it is a little off. Here is my code:

var contextMenu = require("sdk/context-menu");
var tabs = require("sdk/tabs");

contextMenu.Item({
  label: "Upload to domain",
  context: contextMenu.SelectorContext("img,video"),
  contentScript:'self.on("click", function(node, data){self.postMessage(node.src);});',
  onMessage: function(imgSrc){
    tabs.open("http://domain.org/upload/?"+imgSrc);
  }
});

If you play the video on the right here, the video url gets passed to the onMessage function fine. If you try it here, it doesn't pass a url. They are both webms. I am guessing that it just doesn't work with an html5 player. Am I correct? Is there a workaround for this?

Upvotes: 2

Views: 71

Answers (1)

mido
mido

Reputation: 25054

your method of finding source does not always work with video element because, unlike img, the video element's source can be specified as child element source which is what is happening in the second case. To handle that scenario, your code must be something like:

self.on("click", function(node, data){
    if(node.src){
        self.postMessage(node.src);
    }else if(node.nodeName.toUpperCase() === "video".toUpperCase()){
        var sources = node.children; // or may be node.querySelector("source");
        for(var i in sources){
            if(sources[i].src && sources[i].nodeName.toUpperCase() === "source".toUpperCase()){
                self.postMessage(node.src);
            }
        }
    }
}

Upvotes: 1

Related Questions