Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

irisvanda

Browser pode não suportar getElementById?

Recommended Posts

Boa tarde,

 

Gostaria de saber se é possível um browser não conseguir executar o getElementById, pois estou tentando rodar um script em um browser do Windows Mobile 2003 Second Edition e a execução é interrompida justamente no getElementById.

 

Utilizei o script abaixo para fazer uns testes e sempre é levantado o alerta, não passou por nenhuma das opções.

 

 

var elemento = null;
if(document.getElementById){
              elemento = document.getElementById(nome);
              
}else if(document.all){
              elemento = document.all[nome];
              
}else if(document.layers){
              elemento = document.layers[nome];
              
}else{
              alert("Seu browser não é capaz de exibir a página.");
}
          
elemento;

 

 

 



Complementando: O browser utilizado é o Internet Explorer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Preciso acessar uma Div para alterar o conteúdo. Eu tenho como fazer isso diretamente sem utilizar getElementById, assim como é feito com o form?

Compartilhar este post


Link para o post
Compartilhar em outros sites

não cara, o getElementById é o standard recomendado.

 

teste somente isso no seu navegador:

 

document.getElementById('teste').style.color = '#f00';

 

se funcionar então o problema não é o getElement, mas sim outra parte do código.

Lembre-se de chamar o js depois de ter criado o elemento no html.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia William,

 

Em todos os testes que fiz o getElementById retornou undefined. Acredito que realmente o browser é muito antigo e não suporta este método.

 

Preciso achar uma maneira alternativa. No caso dos forms usei document.forms[0], mas ainda não encontrei uma solução para a DIV.

 

Obrigada pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas vc colocou o getElementById depois do elemento html ?

 

tente assim:

window.onload = function() {
    document.getElementById('teste').style.color = '#f00';
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se ele retorna undefined é porque ele nao encontrou o elemento especificado, não é porque não está funcionando, veja se você colocou o ID igual ao que você está buscando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para ajudar segue abaixo mais ou menos como meu script é:

 

function pegarElemento(nome) {  
          var elemento = null;  
          if(document.getElementById){  
              elemento = [b]document.getElementById(nome)[/b];  
                
          }else if(document.all){  
              elemento = document.all[nome];  
                
          }else if(document.layers){  
              elemento = document.layers[nome];  
                
          }else{  
              alert("Seu browser não é capaz de exibir a página.");  
          }  
            
          return elemento;  
}  
  
function executarConteudo(url, parametros) {  
        var xmlhttp;  
        if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari  
            xmlhttp = new XMLHttpRequest();  
  
        } else {// code for IE6, IE5  
            try {  
                //If the Javascript version is greater than 5.  
                xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");  
                  
            } catch (e) {  
                //If not, then use the older active x object.  
                try {  
                    //If we are using MS.  
                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");  
                      
                } catch (E) {  
                    //Else we must be using a non-IE browser.  
                    xmlhttp = false;  
                }  
            }  
        }  
          
        if (!xmlhttp) {  
            throw new Error("Problema na inicialização");  
        }  
  
        var paramUrl = [];  
        for (var name in parametros) {  
            paramUrl.push(name+"="+parametros[name]);  
        }  
  
        var urlFinal = url+"?"+paramUrl.join("&");  
        xmlhttp.open("POST", urlFinal, true);  
        xmlhttp.onreadystatechange = function pegarEstadoRequisicao() {  
            if (xmlhttp.readyState==4 /*Concluído*/) {                  
                var elemento =[b] pegarElemento("mainframe");[/b]                 
                elemento.innerHTML = xmlhttp.responseText;  
            }  
  
            return xmlhttp.readyState;  
        }  
  
        xmlhttp.send(paramUrl.join("&"));  
}  
  
function load(callType, pKey, fcName, formName) {  
        var params = {}  
        params["callType"] = callType;  
        params["pKey"] = pKey;  
        params["fcName"] = fcName;  
          
        if (formName) {  
             var inputs = document.getElementsByTagName("input");  
             for (var i = 0; i < inputs.length; i++) {  
                    if (inputs[i].type != "submit" && inputs[i].type != "button") {  
                                if (inputs[i].type == "radio" && inputs[i].type == "checkbox") {  
                                    if (inputs[i].checked){  
                                        params[inputs[i].name] = inputs[i].value;  
                                    };  
                                } else {  
                                    params[inputs[i].name] = inputs[i].value;  
                                };  
                    };  
             };  
         };  
  
         executarConteudo(url, params);  
}  

 

<html>
<div class="toolbar">
</div>
<div id="mainframe" name="dvmainframe">
//Aqui dentro serão escritos forms sem precisar dá refresh na página
</div>
</html>

 

 

Resumindo: Eu tenho um menu que ao ser clicado vai chamar a função load, que por sua vez vai chamar a função executarConteudo. Quando ocorrer esta ação a função executarConteudo precisa identificar a DIV "mainframe" para escrever o novo forme sem precisar atualizar a página.

 

 

 

Este código roda em outros borwsers, mas quando tento executar no IE do Windows Mobile 2003 Second Edition dá problema.

 

Agradeço a todos que estão tentando me ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

Depois de muito sofrimento descobri que os browsers utilizados pelos coletores do meu cliente executavam o javascript de forma diferente. Em ambos os coletores não existe o getElementById, mas em um deles eu consigo acessar a div diretamente pelo nome e no outro pelo documentElement.

 

Para compatibilizar o código com todos os browsers criei a função abaixo:

 

function pegarElemento(nome) {
var elemento = null;
if(document.getElementById){
elemento = document.getElementById(nome);
}else if(document.all){
elemento = document.all[nome];
}else if(document.layers){
elemento = document.layers[nome];
} if (document.documentElement && document.documentElement.all) {
elemento = eval("document.documentElement.all."+nome);
} else {
var elementoNoDocumento = eval("document."+nome);
if (elementoNoDocumento) {
elemento = elementoNoDocumento;
}
}
if (!elemento) {
alert("Seu browser não é capaz de exibir a página.");
}
return elemento;
};
function executarConteudo(chave, parametros) {
var xmlhttp;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {// Código para IE6, IE5
try {
//If the Javascript version is greater than 5.
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
//If not, then use the older active x object.
try {
//If we are using MS.
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
//Else we must be using a non-IE browser.
xmlhttp = false;
}
}
}
if (!xmlhttp) {
throw new Error("Problema na inicialização");
}
var paramUrl = [];
for (var name in parametros) {
paramUrl.push(name+"="+parametros[name]);
}
var elemento = null;
var urlFinal = chave+"?"+paramUrl.join("&");
xmlhttp.open("POST", urlFinal, true);
xmlhttp.onreadystatechange = function pegarEstadoRequisicao() {
if (xmlhttp.readyState==4 /*Concluído*/) {
elemento = pegarElemento("divmainframe");
elemento.innerHTML = xmlhttp.responseText;
}
return xmlhttp.readyState;
}
xmlhttp.send(paramUrl.join("&"));
};
Resumindo:
A função "executarConteudo" chama a função "pegarElemento" que testa todas as possíveis situações e retorna a que se enquadra no browser que esta sendo utilizado.
Obrigada a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Devido a este tipo de problema opto a utilizar o jquery ao invés de tentar fazer uma solução crossbrowser.

 

Nada contra desenvolver em javascript puro, é até interessante, porém quando souberem/detectarem que não funciona em todos os browsers, aconselho a utilizar o jquery que em seu código já faz internamente estas verificações.

 

Mesmo assim obrigado irisvanda por trazer sua solução, é interessante ver uma solução crossbrowser feita com javascript.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.