Ir para conteúdo
Fórum CódigoFonte.net
Igo

Problema com JavaScript

Recommended Posts

Boas Noites,

Recentemente tenho estado a fazer um script para um browser game (O Script é legal :P)

O ficheiro JS corre com a ajuda do GreaseMonkey, sendo o problema o seguinte:

Quando eu tenho o código completo no meu pc, ou seja, quando eu vou ao GM e faço editar o código e ele aparece todo, o script funciona completamente.

No entanto visto que eu vou actualizando o script inúmeras vezes, achei por bem, fazer o upload do meu ficheiro JS para o meu servidor online deixando o script que todos os jogadores terão apenas a redireccionar para o ficheiro JS hostado no meu servidor, assim eu actualizo o script e todos os jogadores terão o script actualizado sem ter que instalar novas versões.

O problema é que quando eu tento usar o redireccionamento existe uma parte do script que deixa de funcionar, simplesmente o botão em causa deixa de funcionar =\

Se precisarem de mais alguma informação é só dizer ;)

Cumps,

Igo

Compartilhar este post


Link para o post
Compartilhar em outros sites

No botão que deixa de funcionar ele vai para alguma pagina?

Quando você coloca o ficheiro JS no servidor e coloca em pastas você precisa verificar os caminhos, por exemplo:

ficheiro.js Está localizado na pasta JS.

no link:

<a href="js/ficheiro.js">Link</a>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não devo ter-me explicado bem.

O ficheiro JavaScript adiciona umas certas funções ao dito jogo. Novos menus, etc...

Apenas uma parte do código não é executado quando o ficheiro é acedido através do servidor, no entanto corre tudo bem quando é acedido localmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

//script do conversor

(function(){
    var doc = document;
    var console = unsafeWindow.console;
    function $(id) { return(doc.getElementById(id)); }
    function xp1(x, p) {
        var r = doc.evaluate(x, p, null, 9, null).singleNodeValue;
        return(r);
    }
    function xp(x, p) {
        var r = doc.evaluate(x, p, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
        var len = r.snapshotLength;
        var ar = new Array(len);
        for(var i=0; i<len; i++) {
            ar[i] = r.snapshotItem(i);
        }
        return(ar);
    }
    function __tf(template, name) {
        for(var elName in template)
        {
            if (template.hasOwnProperty(elName))
            {
                var p = template[elName];
                if (elName == name)
                    return(p);
                if (p.children)
                {
                    var q = __tf(p.children, name);
                    if (q)
                        return(q);
                }
            }
        }
        return(null);
    }
    function dc(template, parent)
    {
        // { thead: { el:null, attrs:{}, children: {} } }
        for(var elName in template)
        {
            if (template.hasOwnProperty(elName))
            {
                var p = template[elName];
                p.el = doc.createElement(p.tag);
                if (parent)
                    parent.appendChild(p.el);
                
                if (p.attrs)
                {
                    for(var atName in p.attrs)
                    {
                        if (p.attrs.hasOwnProperty(atName))
                        {
                            var atValue = p.attrs[atName];
                            if (atName == "text")
                                p.el.textContent = atValue;
                            else if (atName == "html")
                                p.el.innerHTML = atValue;
                            else
                                p.el.setAttribute(atName, atValue);
                        }
                    }
                }
                
                if (p.children)
                {
                    dc(p.children, p.el);
                }
            }
        }
        template.find = function(name) {
            return(__tf(template, name));
        };
        return(template);
    }
    
    function repeat(c, n) {
        var s = "";
        for(var i=0; i<n; i++)
            s += c;
        return(s);
    }
    function padLeft(s, len, c) {
        c = c || " ";
        s = s.toString();
        if (s.length < len)
            s = repeat(c, len - s.length) + s;
        return(s);
    }
    function padRight(s, len, c) {
        c = c || " ";
        s = s.toString();
        if (s.length < len)
            s += repeat(c, len - s.length);
        return(s);
    }

    function convertDuelReport(div) {

        var duelo = {};

                duelo.desafiador = 0;
                teste = xp1('./table/tbody/tr[2]/td[2]/div/div/table[1]/tbody/tr/td[1]', div).innerHTML;
                teste = teste.substr(teste.lastIndexOf("<br>")+4);
                if (teste.substr(0,8) == "<strong>")
                         duelo.desafiador = 1;
                else
                         duelo.desafiador = 2;

        duelo.p1 = xp1('./table/tbody/tr[2]/td[2]/div/div/table[1]/tbody/tr/td[1]', div).innerHTML;
                 inicio_j1 = duelo.p1.indexOf(");\">");
                         duelo.p1 = duelo.p1.substr(inicio_j1+4);
                         fim_j1 = duelo.p1.indexOf("<");
                duelo.p1 = duelo.p1.substr(0,fim_j1);

                duelo.n1 = xp1('./table/tbody/tr[2]/td[2]/div/div/table[1]/tbody/tr/td[1]', div).innerHTML;
                         inicio_n1 = duelo.n1.indexOf("<br>");
                         duelo.n1 = duelo.n1.substr(inicio_n1+8);
                         fim_n1 = duelo.n1.indexOf("<");
                duelo.n1 = duelo.n1.substring(0,fim_n1);

                if(duelo.desafiador == 2){
                  duelo.nd1 = xp1('./table/tbody/tr[2]/td[2]/div/div/table[1]/tbody/tr/td[1]', div).innerHTML;
                           inicio_nd1 = duelo.nd1.lastIndexOf("<br>");
                           duelo.nd1 = duelo.nd1.substr(inicio_nd1+8);
                           fim_nd1 = duelo.nd1.indexOf("    ");
                  duelo.nd1 = duelo.nd1.substring(0,fim_nd1);
                }else if (duelo.desafiador == 1){
                  duelo.nd1 = xp1('./table/tbody/tr[2]/td[2]/div/div/table[1]/tbody/tr/td[1]', div).innerHTML;
                           inicio_nd1 = duelo.nd1.indexOf("<br>");
                           duelo.nd1 = duelo.nd1.substr(inicio_nd1+8);

                           inicio_nd1 = duelo.nd1.indexOf("<br>");
                           duelo.nd1 = duelo.nd1.substr(inicio_nd1+8);

                           fim_nd1 = duelo.nd1.indexOf("    ");
                  duelo.nd1 = duelo.nd1.substring(0,fim_nd1);
                }

        duelo.loc = xp1('./table/tbody/tr[2]/td[2]/div/div/table[1]/tbody/tr/td[3]', div).innerHTML;
                          inicio_local = duelo.loc.indexOf("<h4>");
                          duelo.loc = duelo.loc.substr(inicio_local+4);
                          duelo.loc = duelo.loc.substr(0,duelo.loc.indexOf("</h4>"));
                          tmp = duelo.loc;

                duelo.loc = xp1('./table/tbody/tr[2]/td[2]/div/div/table[1]/tbody/tr/td[3]', div).innerHTML;
                  inicio_local = duelo.loc.lastIndexOf(">");
                  duelo.loc = duelo.loc.substr(inicio_local+5);
                  duelo.loc = duelo.loc.substring(0,duelo.loc.indexOf("    ")-1);
                  tmp2 = duelo.loc;

                  duelo.loc = tmp + ": " + tmp2;

        duelo.p2 = xp1('./table/tbody/tr[2]/td[2]/div/div/table[1]/tbody/tr/td[5]', div).innerHTML;
                 inicio_j2 = duelo.p2.indexOf(");\">");
                         duelo.p2 = duelo.p2.substr(inicio_j2+4);
                         fim_j2 = duelo.p2.indexOf("<");
                duelo.p2 = duelo.p2.substr(0,fim_j2);

                duelo.n2 = xp1('./table/tbody/tr[2]/td[2]/div/div/table[1]/tbody/tr/td[5]', div).innerHTML;
                         inicio_n2 = duelo.n2.indexOf("<br>");
                         duelo.n2 = duelo.n2.substr(inicio_n2+8);
                         fim_n2 = duelo.n2.indexOf("<");
                duelo.n2 = duelo.n2.substring(0,fim_n2);

                if(duelo.desafiador == 1){
                  duelo.nd2 = xp1('./table/tbody/tr[2]/td[2]/div/div/table[1]/tbody/tr/td[5]', div).innerHTML;
                           inicio_nd2 = duelo.nd2.lastIndexOf("<br>");
                           duelo.nd2 = duelo.nd2.substr(inicio_nd2+8);
                           fim_nd2 = duelo.nd2.indexOf("    ");
                  duelo.nd2 = duelo.nd2.substring(0,fim_nd2);
                }else if(duelo.desafiador == 2){
                  duelo.nd2 = xp1('./table/tbody/tr[2]/td[2]/div/div/table[1]/tbody/tr/td[5]', div).innerHTML;
                           inicio_nd2 = duelo.nd2.indexOf("<br>");
                           duelo.nd2 = duelo.nd2.substr(inicio_nd2+8);

                           inicio_nd2 = duelo.nd2.indexOf("<br>");
                           duelo.nd2 = duelo.nd2.substr(inicio_nd2+8);

                           fim_nd2 = duelo.nd2.indexOf("    ");
                  duelo.nd2 = duelo.nd2.substring(0,fim_nd2);
                }

        duelo.hitsBody = xp1('./table/tbody/tr[2]/td[2]/div/div/table[2]/tbody', div).innerHTML;
        danos = duelo.hitsBody.substr(duelo.hitsBody.lastIndexOf("<tr>"));
                danos = danos.substr(danos.indexOf("bold;\">")+7);
                dano_j2 = danos.substr(0,danos.indexOf("</span>"))+": ";
                danos = danos.substr(danos.indexOf("bold;\">")+7);
                dano_j2 += danos.substr(0,danos.indexOf("</span>"));
                danos = danos.substr(danos.indexOf("bold;\">")+7);
                dano_j1 = danos.substr(0,danos.indexOf("</span>"))+": ";
                danos = danos.substr(danos.indexOf("bold;\">")+7);
                dano_j1 += danos.substr(0,danos.indexOf("</span>"));

        duelo.final = xp1('./table/tbody/tr[2]/td[2]/div/div/h4', div).innerHTML;

        var espacos = 25;
        var code = "[ code]\n";
        code += "+-------------------------------------------------------+\n";
        code += "| " + padRight(duelo.loc, 53) + " |\n";
        code += "+-------------------------------------------------------+\n";
        code += "| " + padLeft(duelo.p1, espacos) + " | " + padRight(duelo.p2, espacos) + " |\n";
        code += "| " + padLeft(duelo.n1, espacos) + " | " + padRight(duelo.n2, espacos) + " |\n";
        code += "| " + padLeft(duelo.nd1, espacos) + " | " + padRight(duelo.nd2, espacos) + " |\n";
        code += "+---------------------------+---------------------------+\n";
                code += "| " + padRight(duelo.p1 + ": " + dano_j2, 53) + " |\n";
                code += "| " + padRight(duelo.p2 + ": " + dano_j1, 53) + " |\n";
        code += "+-------------------------------------------------------+\n";
        code += "[ /code]\n\n";
        code += duelo.final;

        alert(code);
    }

    function hookReport(div) {
        var titleRow = xp1('./table/tbody/tr[2]/td[2]/div/table/tbody/tr', div);
        if (!titleRow) return;

        if (titleRow.textContent.match(/Duelo:/)){

                }else if (titleRow.textContent.match(/Duel:/)){
                  
                }else{
                  return;
                }
        
        var t = dc({
            "th": { 
                tag: "th", 
                children: {
                    "btn": {
                        tag: "button",
                        attrs: {
                            text: "Converter",
                            title: "Botao Converter"
                        }
                    }
                }
            }
        });
        titleRow.appendChild(t["th"].el);
        t.find("btn").el.addEventListener("click", function() { convertDuelReport(div); }, false);
    }
    
    //
    // Start up
    //
    var loc = doc.location;
    var o_show = unsafeWindow.AjaxWindow.setJSHTML;
    var f = function(div, content) {
        if (!div) return;
        var ret = o_show(div, content);
        hookReport(div);
        return(ret);
    };
    for(var o in o_show) {
        f[o] = o_show[o];
    }
    unsafeWindow.AjaxWindow.setJSHTML = f;
    
})();

É este código que não funciona quando o ficheiro é chamado do servidor, no entanto (como disse anteriormente) se este código for executado de um ficheiro no nosso computador ele funciona.

O código cria um determinado botão numa determinada janela (AJAX) do jogo.

(Obs: O script não foi feito por mim, eu apenas fui dando uns retoques para funcionar no servidor PT do jogo, alem e que alterei o output final do script)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×
×
  • Criar Novo...