TypeError não detectado: não é possível ler a propriedade 'msie' de indefinido - jQuery tools

189

Estou recebendo o seguinte erro no console do desenvolvedor do Chrome:

Uncaught TypeError: Cannot read property 'msie' of undefined

Meu entendimento é que é porque .browser agora está obsoleto no jQuery, no entanto, estou usando a versão mais recente das ferramentas do jQuery e ainda está dando o erro, verifiquei o jsarquivo e ele está lá.

Como posso contornar isso para que não dê o erro?

Colin747
fonte
1
este erro é insuficiente. De que elemento você está tentando ler isso?
Siddharth Gupta
Eu não usei .browserno meu código. Parece detectá-lo no arquivo de ferramentas do jQuery.
Colin747
6
O browserobjeto não está apenas obsoleto no 1.9, ele se foi . Se o jQuery Tools ainda o estiver usando, o jQuery Tools estará quebrado.
Pointy
1
@ Alexander, que parecia se livrar do erro. Você pode colocar uma resposta, se quiser.
Colin747
3
As últimas ferramentas do jQuery foram testadas apenas com o jQuery 1.7. O jQuery 1.9 não é compatível com a versão mais recente do jQuery Tools; é simples assim. Despeje o jQuery Tools ou faça o downgrade do jQuery para qualquer versão abaixo de 1.9 que funcione. Caso contrário, não espere que alguém atualize o jQuery Tools, ele está sem desenvolvedor nos últimos anos.
Sparky

Respostas:

188

O $.browsermétodo foi removido a partir do jQuery 1.9.

jQuery.browser() removed

O jQuery.browser()método está obsoleto desde o jQuery 1.3 e é removido no 1.9. Se necessário, ele está disponível como parte do plugin jQuery Migrate.Recomendamos o uso da detecção de recursos em uma biblioteca como o Modernizr.

- Guia de atualização do jQuery Core 1.9 .

Conforme indicado no Guia de atualização, você pode tentar usar o plug - in jQuery Migrate para restaurar essa funcionalidade e deixar o jQuery Tools funcionar.

Alexander
fonte
242

Você pode conferir esta solução pela AJ. É bem simples, basta copiar e colar as seguintes linhas de código.

jQuery.browser = {};
(function () {
    jQuery.browser.msie = false;
    jQuery.browser.version = 0;
    if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
        jQuery.browser.msie = true;
        jQuery.browser.version = RegExp.$1;
    }
})();

Referência :

JrBriones
fonte
4
Isso funciona perfeito! Mas acho que isso deve ser usado como um patch, e não como uma solução, certo?
Jobokai
Obrigado, usando um plugin jquery que estava usando isso e essa foi uma solução fácil de curto prazo até que uma correção real seja lançada.
31514 Joe Meyer
Obrigado. Isso corrigiu o Query Tools v1.2.7, pois atualizamos o JQuery para o mais recente.
bsentosa
1
UAU, se eu puder lhe dar 10 vantagens, farei isso agora.
Iman Hejazi
9
Esta resposta não está mais correta, pois o IE11 não possui o token MSIE na userAgentcadeia de caracteres.
Dave Methvin
45

Use a seguinte tag de script no seu arquivo jsp / js:

<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>

isso vai funcionar com certeza.

Manisha Srivastava
fonte
verifique se você tem uma conexão com a internet funcionando. Se você estiver usando offline, faça o download do arquivo js no final e, em seguida, consulte esse arquivo.
Manisha Srivastava
Bem, eu posso ver que ele está hospedado on-line ... de qualquer forma, obrigado, resolvi-o com jquery.noConflict (), pois eu tinha duas versões do jquery usadas na mesma página.
Prerit Mohan
@ User5590: a qualquer hora :)
Manisha Srivastava
Não deve usar jquery não minificado na produção: verifique cdnjs.com por exemplo. E use HTTPS.
Takman
27

Eu uso o código abaixo após o arquivo js incluir e está funcionando agora.

<script src="js/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
    jQuery.browser = {};
    (function () {
        jQuery.browser.msie = false;
        jQuery.browser.version = 0;
        if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
            jQuery.browser.msie = true;
            jQuery.browser.version = RegExp.$1;
        }
    })();
</script>
Atik Khan
fonte
Este link ligação me dá erro, mas este pequeno pedaço de código que você escreveu me ajudou muito, graças homem.
Saman
7

Aqui está o bug do jQuery Tools no GitHub . Você pode tentar um dos patches.

editar - não me parece que o jQuery Tools esteja recebendo muito suporte. Eu, pessoalmente, não começaria um novo projeto com uma dependência dessa biblioteca, a menos que estivesse preparado para assumir o apoio.

Pontudo
fonte
1
+1, o jQuery Tools tem sido uma bagunça completa nos últimos anos. O fato de não estar "recebendo muito apoio" é muito preciso e um enorme eufemismo. Eu acho que houve apenas uma pequena atualização desde o jQuery 1.3 e nenhum desenvolvedor nos últimos dois anos também.
Sparky
Concordou, alguém tem uma recomendação para uma biblioteca de substituição? Algo com um controle deslizante de rolagem, sobreposição e intervalo? Evito o jQuery mobile, porque ele vem pré-estilizado. Eu o estilizei antes e é um pesadelo.
inorganik
5
Eu mudei para apenas encontrar bibliotecas mínimas bem escritas para cada função que eu quero. ou seja: controle deslizante de entrada de faixa: loopj.com/jquery-simple-slider , scroller / slider: bxslider.com . I encontrar muito melhor apoio e e pegada global menor Encontrando bibliotecas individuais como estes
jfeust
4

Eu simplesmente adicionei

jQuery.browser = {
    msie: false,
    version: 0
};

após o script jquery, porque não me importo mais com o IE.

userlond
fonte
3

Substitua seu JS por

<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

Link de origem

Bugfixer
fonte
No momento em jquery 1.7+ mais recente jquery-ui é:<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
Relojoeiro
0

Como não pretendo oferecer suporte a versões antigas do MS IE, simplesmente substituí todas as referências browser.msieporfalse . Não é uma solução agradável, eu sei, mas funciona para mim.

(Na verdade, eles apareceram como !browser.msie, o que poderia ser omitido das condições.)

Lerin Sonberg
fonte
0

Use como golpe

$(function (a) {

. . . . .Em sua função, você pode usar a propriedade msie como

if (a.browser.msie) 
{
}
else 
{
   $(settings.current).after(Uploadelement);
}

boa sorte

HamidSadeghi
fonte
0

Use como golpe

eu uso esse comando e resolvo

Erro "TypeError não detectado: não é possível ler a propriedade 'msie' de indefinido"

if (/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery)) {
    return;
}
Arezoo
fonte
0

Eu estava recebendo esse erro ao usar o JQuery 1.10 e o JQuery UI 1.8. Consegui resolver esse erro atualizando para a JQuery UI 1.11.4 mais recente.

Etapas para atualizar a interface do usuário do JQuery no Visual Studio:

  • Navegue para Projeto ou Solução
  • Clique com o botão direito: "Gerenciar pacotes NuGet"
  • À esquerda, clique na guia "Pacotes Instalados"
  • Procure por "JQuery UI (biblioteca combinada)" e clique em Atualizar
  • Se encontrado, selecione-o e clique em Atualizar
  • Se não for encontrado, localize-o na guia "Online> nuget.org" à esquerda e clique em instalar. Se a versão antiga da versão da interface do usuário do Jquery ainda existir, ela poderá ser excluída do projeto
LogicFirst
fonte
0

Se você tiver definido o jQuery duas vezes, poderá obter este erro. Por exemplo, se você estiver trabalhando com o Primefaces (ele já inclui o jQuery) e o definirá em outro local.

Carlos UCR
fonte