Autor Zpráva
weroro
Profil
Ahoj,

pre jedno diskusné fórum, som si napísal greaseMonkey script rozšírenie (userscript) na prehrávanie videí z youtube priamo v príspevku. Daný script mi funguje v Opere 12.16 bez problému, ale vo firefoxe cez rozšírenie grease monkey nereagujú onclick udalosti. Mohli by ste prosím skúsiť analyzovať kde by mohol byť problém? Pre FF som US nevytváral dlho, tak je možné, že je tam nejaká bezpečnostná zrada.

if (!ytip)
{
    var ytip = {
    
        width : 560,
        height : 315,
        autoplay : true,
        wmode : false,
        
        lang : {
            createTitle : 'Prehrať video v príspevku',
            destroyTitle : 'Zatvoriť video'
        },
        styles : {
            createStyle : 'display:block;width:36px;height:24px;background:#ccc url(\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAaUlEQVR42mNgGAWjYMSD/wMMBo8DBirkSXYAUOl8IBYYSAeAwHsgLhhIB4DBv3//7gMphwFzAJJD9gMphQFzABLoJzZ9DC8HDFgUDGQiHNBsOLAFEc2K4tHacMjUhqNpgOoOGAWjYMQDAD4roOvLuhuEAAAAAElFTkSuQmCC\') scroll center center no-repeat;',
            destroyStyle : 'padding:5px 20px;background: url(\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAUCAYAAAAHpoRMAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAABAAAAAQBPJcTWAAAAB3RJTUUH3gEFBhACTh8BsgAAA89JREFUeJzVlVtII2cUgM9kLpqMEcl42YWEICTWYFj6EEphoUkllZUW+rIgBo2Xoii20KeoSLRSHzQFtT6paX1Zle2NPiiCaNRFmhIRKgjZQJuV3cWKE0nDZDK5TCbTh85IGqxbNulDDxwG/n/O+b//3H6A/6tks1k0GAzeGx8fn7FYLL9QFBUlCCKNYViWIIi0RqOJWiyWE7fbPRMMBu9ls1n0PwFJJBIVS0tLnxiNxmcKhUIAgNw/qUKhEIxG49ni4uKnLMtWlBSEZVm12+32VFRUJKQDxX+hOZIkE2NjY1/E4/HKkoDwPI/Nz8+7VCoVBwAigiACSZJxDMP4mwAIgkiTJHkNrVKpuNnZ2VGe5/GiYY6Pj9/W6XTnIIW/s7Pz2/39/Zbp6ekJiqKikJcevV7/cnl5+ePt7e0P7Hb7E3ldq9X+fnR0dL8okGQyqRoaGvIiCJIDALGyspI5PDx8FwAgnU4TKysrA7W1tREAyBkMhrOtra0P5aJdXV39CMOwLEgRGxgY+KoomEAg8E5jY+OvkkMRwzB+YmJimuM4EgAgk8nga2trPVar9Wefz9cqCIICACAajVb39PSsyZcAALGhoeG3omA8Hs9nJEnGIS8VJEnGp6amPmdZVg3wV03RNH1XEAQEAODq6qpucHDwa4Ig0gV2iaJgurq6HkuF+rfWlbrEU9glNE3f6e3tfYTjeKbQRvJzqyhu2xQE4cahxXGc0u/332cYpip//fLy8k4gEHiL53ms0EYUReRVMLfK5OTkjNTS1zdEEESwWq3+09PTN/OgEemrODg4eK+pqSkEBZFRKpXJomD29vYe1NfXP4e8OdLc3HwYCoXM8j/hcPiNhYUFF03Td2Uwv99vNZvNTyFvQOr1+pdFwTAMU9XR0fEN5BXvzs7O+/J+KBQyt7S07JeVlaWdTufji4sLLQBALpdDvF7vEIqiWdnW4XB8VxQMAIDP52utrq6OAoBYXl6e8nq9QyzLqk9OTiw2m+0QQRABAEQURfm2trYfw+FwA8MwVW632yO9YSJFUX/kX+K1JZVKlY+MjMzJHVJTU3Nlt9ufGAyGM2mOXCuKolmz2fzUZrP9pFar4wCQw3E843K5vuQ4Tlk0DABAJBKp6+7uXr+pZW9THMczTqdznabpupKA5AONjo7OSSl71cudoygqOjw8PBeJRGpLCiJLKpUq9/l8DxwOx/c6ne6cIAg5UvKLndFqteft7e0/7O7utiaTydKk5jaJxWKazc3Nh/39/Y9MJtMLiqJ4k8n0oq+vb31jY+NhLBbTvI7fPwG6tu4uirk1xgAAAABJRU5ErkJggg==\') scroll center center no-repeat;'
        },
        
        createAnchor : 'onclick="return ytip.createInlineYT(this);"',
        destroyAnchor : 'onclick="return ytip.destroyInlineYT();"',
        saveContent : new Array(),
        active : false,
        
        restoreContent : function (del)
        {
            if (this.saveContent.length > 1)
            {
                this.saveContent[0].innerHTML = this.saveContent[1];
                this.saveContent[2].innerHTML = this.saveContent[3];
                if (del)
                {
                    this.saveContent = [];
                }
            }       
        },
            
        createInlineYT : function (button)
        {
            var videoCode = button.parentNode.getElementsByTagName('a')[0].innerHTML.split('&v=')[1];
            var ap = (this.autoplay) ? 1 : 0;
            var wm = (this.wmode) ? 'opaque' : 'window';
            var videoYT = '<iframe src="//www.youtube.com/embed/' + videoCode + '?hl=en&fs=1&rel=0&autoplay=' + ap + '&wmode=' + wm + '" width="' + this.width + '" height="' + this.height + '" frameborder="0" allowfullscreen></iframe>';            
            this.restoreContent();
            this.saveContent[0] = button.parentNode.parentNode;
            this.saveContent[1] = this.saveContent[0].innerHTML;
            this.saveContent[2] = this.saveContent[0].parentNode.firstChild;
            this.saveContent[3] = this.saveContent[2].innerHTML;
            this.saveContent[2].innerHTML = '<a href="' + location.href + '"  title="' + this.lang.destroyTitle + '" ' + this.destroyAnchor + ' style="' + this.styles.destroyStyle + '"></a> ' + this.saveContent[3];
            this.active = true;
            this.saveContent[0].innerHTML = videoYT;
            return !this.active;
        },
        
        destroyInlineYT : function ()
        {   
            if (this.active)
            {
                this.restoreContent(true);
                this.active = false;            
            }
            return this.active;
        },
        
        init : function ()
        {
            var contentElements, containers;
            var attachContent = document.getElementsByClassName('attachcontent');
            if (attachContent.length < 1)
            {
                return false;
            }
            for (var i = 0; i < attachContent.length; i++)
            {
                contentElements = attachContent[i].getElementsByTagName('div');
                containers = [];
                for (var j = 0; j < contentElements.length; j++)
                {
                    if (contentElements[j].parentNode == attachContent[i])
                    {
                        containers.push(contentElements[j]);
                    }
                }
                if (containers[1])
                {
                    containers[1].innerHTML += '<a href="#" title="' + this.lang.createTitle + '" ' + this.createAnchor + ' style="' + this.styles.createStyle + '"></a>';
                }
            }
        }

    }
}
ytip.init();

Hlavička scriptu vyzerá takto

// ==UserScript==
// @name           Youtube inline player
// @description    Embedovanie videa do obsahu príspevku
// @include        http://www.hojko.com/*
// @version        1.0
// ==/UserScript==

Ďakujem za váš čas.
Chamurappi
Profil
Reaguji na werora:
V diskusi jsem teď našel několik vláken, kde jsem zmiňoval, že někdo zmiňoval, že v UserScriptech se musí na nastavování událostí používat addEventListener, ale nenašel jsem původní zdroj té informace. Něco na tom nejspíš bude…
_es
Profil
weroro:
„Podozrivé“ sú príkazy objekt.innerHTML += "nejaký text", viď Javascript tutoriál.
weroro
Profil
Chamurappi:
addEventListener nereagoval tiež.

_es:
Presne toto bol problém. Namiesto innerHTML som to urobil pomocou appendChild() a už je všetko v poriadku, po miernej úprave celého scriptu.

Ďakujem.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: