JavaScript intrusivo está sempre ok?

9

Eu estava pensando que, se todos os usuários de um site precisam ter o JavaScript ativado, está tudo bem em usar um JavaScript invasivo?

Eu sou totalmente a favor do aprimoramento progressivo, mas qual é o sentido em que um aplicativo Web avançado repele os usuários na porta se eles têm um navegador antigo ou JavaScript desativado?

Temos um público-alvo muito reduzido e podemos dizer ao público-alvo que navegador e plugins / funcionalidades eles precisam ter. Então, minha pergunta é: é possível misturar JS e HTML nesse caso? Como usar atributos onclick.

Petah
fonte
11
"Se todos os usuários de um site precisam ter o JavaScript ativado ... se eles tiverem ... JavaScript desativado?" <- Isso é uma contradição, e não tenho certeza de como dar uma resposta útil por resolver.
HedgeMage
3
Observe que, dependendo do público-alvo e do mercado-alvo, pode haver leis de acessibilidade que exijam que seus sites sejam acessíveis a todos os usuários, incluindo pessoas com deficiência. O que isso significa na prática para JS eu não sei. AFAIK (IINAL) onde estou, temos essas leis, mas ainda não houve casos de teste para descobrir os detalhes.
James
16
O que você quer dizer com javascript "intrusivo"? Não estou familiarizado com o termo.
Macke
2
Portanto, sua pergunta é basicamente: escrever código de baixa qualidade está ok? Sim, é para protótipos e projetos suficientemente pequenos e que não requerem manutenção / atualizações após a conclusão. Caso contrário, você apenas se enfrentará meio ano depois, porque leva uma hora para descobrir o que poderia ser plausível se você tivesse investido mais alguns segundos ao colocá-lo no lugar.
02
3
Eu pensei que esta pergunta iria perguntar se estava tudo bem redimensionar a janela do navegador de alguém ou ter toneladas de pop-ups.
Whatsisname

Respostas:

17

Esta é uma decisão de negócios e não uma decisão de design.

Há um custo para fornecer uma versão do site que funcione sem JavaScript (ou Flash ou Silverlight). A empresa precisa decidir se a perda de receita / visitantes vale a pena ou não.

Portanto, se custar US $ 10.000 para escrever esta versão (o número pode estar no lado grande, mas existe apenas para este exemplo), a empresa recuperará essa despesa ao longo da vida útil do site? Caso contrário, não forneça essa versão.

No entanto, se custar apenas US $ 100 para escrever esta versão, faria sentido fornecer a degradação normal.

Depois de tomar a decisão comercial de segmentar apenas navegadores habilitados para JavaScript e esperar que seus usuários tenham o JavaScript habilitado, faz todo o sentido fazer com que seu aplicativo aproveite os recursos que você tem agora disponíveis. A única coisa que você precisará fazer é (como o próprio Stack Overflow) colocar um aviso de que o site não funcionará corretamente se o usuário não o habilitar.

ChrisF
fonte
2
Eu acho que você está me entendendo mal.
Petah
5
Você deve nos dizer "JS invasor" do WTF significa evitar o mal-entendido. Você já foi solicitado a fazer isso (votou 7 vezes)!
21411 maaartinus
11
Eu criei algumas páginas normalmente degradantes no passado e achei o html e o javascript muito menos transparentes, se você ainda deseja oferecer aos visitantes habilitados para JS a melhor experiência do usuário. As páginas foram MUITO mais difíceis de construir e acredito que o cara que mantém a página terá algumas dificuldades em seguir seu código. Portanto, certamente há um custo de manutenção a longo prazo ao estimar o custo de degradação do site. Eu achei que era ser muito tentador compromisso sobre a JS habilitado UX ..
Thomas Stock
11
@maaartinus, javascript obstrutivo é o oposto de javascript discreto pt.wikipedia.org/wiki/Unobtrusive_JavaScript
Petah
11
OK, então só posso dizer ... html + js é uma praga (implementações quebradas ignorando padrões estranhos) e eu minimizaria o esforço, exatamente como Thomas Stock escreveu. Tente fazer com que ele funcione perfeitamente no navegador escolhido (e não escolha IE6: D) ae seja suportável em outros. Em vez de solucionar todos os problemas, dedique seu tempo à funcionalidade.
maaartinus
20

Algo que ninguém mais trouxe até agora ...

99% dos sites recebem um visitante em particular, um com pouco ou nenhum JavaScript. Esse visitante tem um nome: Googlebot .

Um grande motivo para todos também se preocuparem com visitantes cegos ...

Se você é um dos poucos que não se importa com o tráfego de mecanismos de pesquisa, bem, essa é sua prerrogativa - mas certamente não cria uma regra geral.

Dori
fonte
4
De fato. Melhoramos um de nossos sites para torná-lo mais acessível aos cegos e, como conseqüência (não intencional), o tráfego obtido do Google multiplicado por quase um fator de 10 em um ano.
Kris
11
Sim, mas o site não é para o público. Portanto, as classificações de pesquisa não se aplicam.
Petah
3
@Petah: Você considerou afirmando claramente e de forma sucinta o que suas exigências precisas, situações e restrições são na questão , em vez de salpicando pequenos trechos de informação aqui e ali nos comentários?
APENAS MINHA OPINIÃO correta
11
Você não está mais certo. Há algum tempo, o Googlebot executa bem o javascript (não é surpresa, já que o Google funciona tanto no mecanismo V8 quanto no angularjs).
Maaartinus
8

As pessoas que escrevem coisas para ambientes internos específicos são uma grande razão pela qual o IE6 ainda está por aí.

Pense nisso

Oli
fonte
4

Se você estiver criando um site apenas para JS (talvez 'aplicativo', neste caso, seja uma palavra melhor), a chamada 'discrição' do JS não importa tanto quanto no caso, quando você precisa degradar normalmente para não- Versão JS.

No entanto: o JavaScript escrito de uma maneira discreta é geralmente mais fácil de escrever (e pelo menos acho dessa maneira) e manter. É mais fácil introduzir alterações no layout HTML que não quebram o JS e alterações no JS sem se preocupar em quebrar o HTML.

Mchl
fonte
4

Se você estiver construindo um site, eu manteria o JavaScript discreto. No entanto, se você estiver criando algum tipo de aplicativo (como o Google Docs), o JavaScript será bastante invasivo.

JavaScript e HTML5 são ótimos para criar aplicativos, se essa for sua necessidade, mas é realmente uma escolha comercial.

Zachary K
fonte
Sim, é mais parecido com o Google Docs do que com um site. E usamos muito o HTML5.
Petah
Corrija-me se estiver errado, mas acho que você ainda pode utilizar a maioria dos conceitos em JavaScript discreto sem necessariamente criar uma bagunça no código? Esse é o conceito que se destaca e faz mais barulho para mim. Talvez você esteja se referindo a outros aspectos do JavaScript não obstrutivo que você precisaria evitar usando o HTML5, como compatibilidade com versões anteriores com usuários que não são JavaScript. Você tem que escolher o que é melhor para você e o projeto, contanto que você pode inteligentemente justificar razões e analisar o risco, então eu acho que é tudo de bom :) +1
jmort253
O que estou falando é como o site funcionará se o Javascript estiver desativado. Há momentos em que ele será totalmente funcional (se não tão bom) e outros em que falhará completamente. Não estou preocupado com navegadores antigos que não suportam JavaScript (Netscape 1). É claro que, em qualquer caso, não há razão para escrever BAD javascript
Zachary K
2

A maioria dos usuários (meus usuários, não conheço seus usuários) tem JavaScript disponível e ativado. Vamos dar a esses usuários uma ótima experiência. No entanto, você ainda precisa fornecer uma versão do seu site que funcione sem Javascript. Eu sei que é um aborrecimento criar duas versões, mas é assim que acontece no desenvolvimento web. (Na realidade, talvez você precise criar várias versões, uma terceira pode ser uma versão móvel do seu site).

O que você não quer fazer é projetar para o denominador menos comum: "Bem, existem alguns usuários que têm o Javascript desativado, então vamos projetar nosso site para funcionar bem para eles - sem Javascript, acesse o servidor para tudo . " Isso penaliza a maioria dos usuários que possuem Javascript.

Marcie
fonte
O que estou dizendo é que nenhum dos usuários tem o JavaScript desativado. Se o fizerem, não poderão acessar o site.
Petah
@ Petah, bem, isso também não é ótimo. Você não deseja rejeitar usuários sem Javascript. Então, é o que você está perguntando, pois estou expulsando os usuários sem Javascript, posso colocar o JS no mesmo arquivo que o meu HTML?
Marcie
Temos um público-alvo muito reduzido e podemos dizer ao público-alvo que navegador e plugins / funcionalidades eles precisam ter. Então você é minha pergunta, está misturando JS e HTML tudo bem nesse caso. Como usar atributos onclick.
Petah
4
@Petah, existem outros motivos para evitar misturar JS e HTML. É pelas mesmas razões que evitamos misturar estilos e HTML - separação de preocupações. Se seu estilo está misturado com sua estrutura, que está misturada com seu comportamento, você tem algo muito difícil de manter. Depois de fazer isso da maneira "discreta" por um tempo, você verá como seus arquivos são elegantes e como é mais fácil fazer alterações.
Marcie
2
@Petah, você tem um arquivo JS enorme para todo o site e tudo fica aí? Eu tenho aproximadamente um arquivo JS por página, e isso funciona bem para mim. Coisas verdadeiramente "comuns" são tudo o que existe no arquivo JS compartilhado.
Marcie
2

Você mencionou o uso de atributos onlick. Você planeja usar um manipulador de eventos JavaScript para navegação na página?

Eu recomendaria contra isso por um único motivo: quebra o clique do meio .

Para clicar regularmente no link, supondo que o JavaScript esteja ativado, eles serão funcionalmente equivalentes:

<a href="#" onclick="window.location = 'myPage.htm';">Click here</a>
<a href="myPage.htm">Click here</a>

Se você tentar dar um clique no meio no primeiro exemplo, obterá uma página em branco em vez de myPage.htm.

Além deste exemplo, acho que é bom usar JavaScript intrusivo se isso fizer sentido para os negócios. Leva menos tempo para escrever (mas não necessariamente mantém) o JavaScript embutido, e a perda do aprimoramento progressivo pode não ser importante na sua situação.

GavinH
fonte
Neste caso não é para a navegação, para botões como 'Atualizar', 'Excluir', 'Criar', etc
Petah
Nesse caso, eu sugiro que seja estilo pessoal. Acho o método invasivo mais rápido / fácil de começar, mas a maneira 'correta' de ser mais limpa e fácil de manter. Definitivamente, há um fator de se sentir bem em fazer o caminho certo.
GavinH
+1 - É mais fácil manter o código limpo desde o início, se for discreto. Acho que, se eu ficar muito bagunçado no começo, pode ser muito difícil tentar resolver os problemas mais tarde. Eu fico impressionado. Prefiro fazer o melhor trabalho possível para que, quando voltar, não seja tão ruim refatorar.
jmort253
2

O JavaScript invasivo estava bem há 10 anos. Também é bom se você é um amador, ou se está construindo um protótipo descartável, ou se houver alguma circunstância que o exija, como dependência de código legado ou código orientado a dados e isso custaria muito muito para consertar

Se você estiver construindo algo desde o início, siga os padrões, escreva um código bom, limpo e sustentável. Escreva algo do qual você se orgulhe e que não o deixará doente daqui a um ano, quando algum pobre coitado pedir ajuda, porque não entende o que você fez. Escreva algo que garanta que seus web designers possam trocar CSS facilmente, sem ter que procurar por HTML e JavaScript confusos.

Crie o aplicativo para que ele tenha espaço para crescer, para que qualquer desenvolvedor possa entrar e fazer a manutenção. O tempo investido agora economizará tempo no futuro, se não o seu tempo, o de outra pessoa.

Verifique se o JavaScript pode ser reutilizado em outro contexto. Certifique-se de que um redesenho completo do site possa ser apenas isso, um redesenho e não uma reconstrução completa de algo que já existe, mas que não foi construído de maneira rígida.

Imagine como seria embaraçoso ter que gastar a mesma quantidade de tempo em um reprojeto que o construiu originalmente.

Confie na minha experiência, o JavaScript não obstrutivo impedirá que você cometa alguns erros dispendiosos.

jmort253
fonte
2

Tudo bem, basta me chamar de detentor de criptas em todo o necro que eu faço, mas nunca senti que o verdadeiro valor disso fosse entendido corretamente. Historicamente, foi afirmado que "JavaScript discreto" ou, mantendo seu JS fora do HTML por meio de atributos de manipulador de eventos HTML embutidos e tags de script que não se vinculavam ao arquivo o máximo possível, é um elemento importante de:

  • Preocupações com acessibilidade
  • SEO
  • E aprimoramento progressivo

MENTIRAS! (bem, agora eles seriam)

A verdade é que você pode fazer JavaScript tecnicamente intrusivo e ainda assim retirar os três itens acima. A menos que você estivesse criando conteúdo HTML dinamicamente, o que era um grande não SEO no dia.

Mas pare e pense ... em você!

Realmente, o grande benefício, a maior e mais baixa vitória de manter a separação sempre foi o benefício direto que o desenvolvedor obtém disso. Você pode ter quantos manipuladores de eventos desejar no mesmo elemento html para o mesmo evento que for conveniente. Isso significa que, se uma tag class="some_class"sempre obtém um determinado comportamento, mas também recebe um bônus quando está dentro de uma id="bonus_behavior"div, não precisamos começar a mexer com a lógica dentro do nosso manipulador de eventos permitido para ramificar isso. Podemos apenas adicionar ou não manipuladores, dependendo do contexto.

Fácil de Ler Também

Outro benefício é legibilidade. Essa era uma preocupação mais crítica quando as ferramentas do navegador consistiam na mensagem de erro exclusiva do IE, informando que havia algo errado, [object]mas a IMO ainda é um grande problema. CSS aqui, JS lá e HTML são o local onde eles e o servidor se encontram. Com todas essas coisas reunidas em um só lugar, faz sentido confiar nos ganchos (os IDs, classes e hierarquia) para criar uma camada de abstração que tudo usa para se conectar ao HTML.

Na IMO, quanto mais você PODE manter seu HTML, CSS e JS separados, mais fácil é não apenas ler, mas também modificar e entender o que está acontecendo. Eu vejo uma div vazia com "dynamic_combo_box" como uma classe e tenho uma boa idéia de que algo está fazendo uma seleção sofisticada que carrega dados dinamicamente. Eu tenho uma liderança em como descobrir isso no JS e no CSS e se eu me deparar com a classe nessas preocupações, terei uma boa idéia do que se trata e como encontrá-lo no HTML.

Muito fácil de tornar ainda mais desleixado

E, claro, a legibilidade tende a andar de mãos dadas com a manutenção. Quando você faz as coisas diretamente, despejando tudo em tags de script em que o HTML relevante está, muitas vezes, fica mais fácil para as pessoas simplesmente recortar e colar esse script no HTML de outra página em que estão trabalhando quando eles querem funcionalidade semelhante, o que significa que agora você tem uma coisa que provavelmente se tornará duas coisas irritantemente semelhantes, mas não 100% iguais, cujo comportamento pode se tornar problemático ao longo do tempo ao desafiar as expectativas e exigir a adição de ramificações mais inúteis para lidar com as exceções necessárias. outro não.

Portanto, o comportamento de manipulação desses ganchos HTML incentiva a reutilização do código de maneira inteligente. Se você precisar ramificar o comportamento para uma implementação alternativa, basta acessar a mesma função e manipulá-la com a hierarquia HTML ou talvez com um att de dados acionando algum comportamento alternativo. É uma parada obrigatória para quem deseja entender como os elementos de interface do usuário de um determinado tipo funcionam e os tipos de recortar e colar desprezivelmente preguiçosos da maneira errada farão a coisa certa / mais sustentável apenas porque é a coisa mais fácil de fazer. faça agora e essa é a melhor maneira de fazer a manutenção acontecer. Torne a coisa mais fácil de fazer, mesmo para alguém que não se importa menos, seja por pânico ou apatia.

Mas e quanto a 2014?

Pode ser um ponto legítimo que, em aplicativos modernos de página única, algumas dessas coisas difíceis talvez não devam ser tão dogmaticamente como têm sido, mas acredite em mim quando digo que não acho que sou a única pessoa que foi vendido porque facilita o trabalho. Sou preguiçoso de uma maneira (espero) principalmente boa. Gosto quando preciso mudar as coisas em um só lugar para obter alterações em todo o aplicativo, quando só preciso procurar em um lugar para descobrir qual é o erro e quando tenho facilidade para entender o que diabos é isso. acontecendo e como melhor reutilizar esse código para fazer algo muito semelhante.

É bom que dividir um banco de dados ou uma camada de dados seja bom. Em última análise, é uma economia de tempo por que eu não fiz isso, como levar cinco minutos para lavar a roupa na noite anterior, em vez de gastar 10 minutos em congelar a boxer e realizar verificações paranóicas na manhã seguinte.

Para mim, são essas motivações egoístas que sempre foram o ponto principal do motivo pelo qual apego não apenas a JS discreta, mas a separação de estilo / comportamento / conteúdo preocupa-se o máximo possível, mesmo que O que o WG seja o mais danado possível. atrapalhe essas preocupações de maneiras compreensíveis e legais / práticas.

Agora que todo mundo está fazendo SPAs e é quase bobo tentar convencer os negócios de que devemos nos preocupar com pessoas que executam sem JS (a acessibilidade agora pode, supostamente, ser tratada com conteúdo gerado por JS), parece que a próxima geração de desenvolvedores de JS se importa menos sobre isso, mas a IMO, ainda há uma vitória por lá e é principalmente para você, o desenvolvedor, escrevendo e mantendo essas coisas. E, realmente, essa vitória sempre deve ter sido o ponto mais sublinhado, mas nunca foi por algum motivo, porque finalmente beneficia você e também o produto por um acidente feliz, devido à facilidade de ajustar / modificar / depurar.

Está tudo bem?

Bem, sim, eu acho. Em um aplicativo descartável descartável para um concurso ou algo assim, talvez. Mas eu ainda faria isso apenas porque tenho o hábito disso e não é realmente difícil de fazer.

Erik Reppen
fonte
1

Se você conhece seu ambiente operacional de destino, Javascript e estruturas como o jQuery podem ser uma verdadeira dádiva de Deus. Por exemplo, em um ambiente corporativo em que o SOE possui Javascript e IE8 mais do que seguro para gravar aplicativos intensivos de navegador do lado do cliente.

Jeremy
fonte
1

Facilitar a degradação graciosa é apenas um dos muitos fatores que tornam o JavaScript discreto uma opção atraente e, na minha opinião, não é o mais importante.

Por experiência pessoal, eu diria que, se você estiver falando de um projeto maior, que provavelmente evoluirá muito com o tempo, o uso de um estilo discreto tornará o aplicativo MUITO mais fácil de manter, depurar e refatorar. Essa é a maior razão pela qual sempre usamos estilo discreto, mesmo em sites que exigem que o JavaScript seja ativado para todos os visitantes.

shang
fonte
+1 a Shang para esta gema "Facilitar a degradação graciosa é apenas um dos muitos fatores que tornam o JavaScript discreto uma opção atraente e, na minha opinião, não é a mais importante". Implementação de Javascript pode ser uma faca de dois gumes, às vezes, tenho encontrado pessoalmente
MattyD
1

Em geral, se você estiver desenvolvendo um "site" tradicional que está disponível anonimamente, indexado pelos mecanismos de pesquisa e onde a receita é gerada por anúncios, você deve fornecer uma degradação suave. A idéia é que esse tipo de site viva e morra por acessibilidade, limitando a acessibilidade significa perder uma tonelada de visualizações de página e, portanto, receita com anúncios.

Um acesso restrito, geralmente "site" (aplicativo da Web) não indexável e com base na receita de anúncios, pode ser muito mais flexível. Tudo se resume a uma decisão entre amplitude de suporte, profundidade de recursos e custo de desenvolvimento. Pense nisso como desenvolver um aplicativo tradicional: qual plataforma você suporta e quais são as especificações mínimas? Se você segmentar apenas uma plataforma e especificações limitadas, poderá se concentrar em fornecer um produto superior com menos custos de desenvolvimento e suporte, ao custo de uma possível participação no mercado em potencial.

Exemplo: a Pesquisa do Google é um site. O Google Docs é um aplicativo da web. A Pesquisa do Google é sem frescura e pode funcionar de forma idêntica sem JavaScript, CSS e / ou imagens, etc. O Google Docs simplesmente não funciona com o JavaScript desativado e nem é degradado normalmente - nem mesmo um aviso para ativar o JavaScript.

Curtis Batt
fonte
1

Eu prefiro ter mais layout e navegação manipulados em CSS. Sim, o Lynx pode não suportá-lo, mas todos os navegadores com todos os recursos que eu conheço não podem desativá-lo. Em seguida, o JavaScript pode ser usado para coisas mais chamativas, mas não necessárias. Eu também gosto de Ruby on Rails para esse fim. Ele pode fazer muito do que o JavaScript seria necessário para o servidor, desde que você não precise de atualizações dinâmicas de página.

Mais direcionado para a resposta da pergunta: NÃO GOSTO do JavaScript necessário, mas há um caso de negócios em que é necessário, como observou ChrisF.

RobotHumans
fonte
0

Javascript é o padrão padrão quando se trata de qualquer tipo de conteúdo dinâmico entregue no lado do cliente, se eles não tiverem JS, provavelmente não terão o silverlight.

Então você tem que pensar em seu mercado / público: você é programmers.stackexchcange ou bbc.co.uk/news? públicos muito diferentes.

henry.oswald
fonte
0

Como você pode olhar na web e ver "javascript invasivo" em muitos sites, sua pergunta básica é respondida; sim, está tudo bem, e muitos sites populares fazem isso, até o Google.

Mais importante, no entanto, é a degradação graciosa da funcionalidade, mesmo que você insista para que os usuários tenham o Javascript ativado, você deve fornecer um nível decente de experiência para usuários não-js, ou eles nunca retornarão voluntariamente.

ocodo
fonte
Eles nunca serão autorizados a passar pela primeira página em primeiro lugar.
Petah