Clique para ativar e usar este controle
Publicado; 06/07/2006 Arquivado em: ColdFusion, Experiência do Usuário, Flex, Tecnologia 17 ComentáriosFoi disponibilizado no início do ano uma atualização para o Internet Explorer 6, que faz com que seja necessário “ativar” um conteúdo ativo (um Flash, Shockwave, Applet, etc) clicando nele antes de efetivamente utilizar. Essa atualização de conteúdos ativos (Active Contents) está associada ao artigo KB916281 da Microsoft e disponível para download automático no Windows, manualmente via Windows Update e também manualmente via download do site do Microsoft.
Exemplo no site Submarino, que ainda não atualizou a inserção de conteúdos em Flash em seu site
Como essa atualização gerou uma certa polêmica (e boa parte dela por que os desenvolvedores não atualizaram seus sites, o que é incrível, já que a Microsoft disponibilizou ainda no ano passado informações sobre a atualização), há também um artigo no Knownledge Base no site da Microsoft de como voltar ao comportamento anterior (KB917425), e igualmente uma atualização pode ser baixada.
Um grande incômodo para os usuário (que pode nem saber o que fazer) ou ainda impedir com que a experiência seja a planejada. Apenas um “tooltip” é mostrado para ao usuário com a mensagem “Clique para ativar e usar este controle” (“Click to activate and use this control” no software em inglês).
Pode parecer uma insanidade, e realmente é. Isso ocorreu porque a Microsoft perdeu um processo judicial sobre o modo como seu browser lida com “Active Contents”, mais precisamente como controles ActiveX (O Flash Player para o IE é um ActiveX) podem ser ativa.dos A Microsoft, que não é boba nem nada, já havia disponibilizado desde Novembro do ano passado um workaround para isso. O workaround é, basica e sucintamente, gerar a tag object via um JavaScript externo (importante ser externo, pois se o JavaScript estiver no próprio arquivo HTML também será pedido para o visitante “ativar o controle”) ao invés de “embeda-la” (inseri-la) no código HTML diretamente. Eu disse que parecia insanidade…
A Adobe, claro, já incluiu esses workaround em seus produtos sob a forma de patchs. Há, por exemplo, uma atualização para o Flex 1.5 que faz com que o código HTML gerado (a tag object) seja diferente, de modo que o usuário não precise clicar para habilitar o conteúdo. Para os FlashForms do ColdFusion 7 também há houve um HotFix. Hoje ele não é mais necessário em vista do ColdFusion 7.0.2. Vale ressaltar que o Firefox não é atingido nem tem relação com essa atualização de ativar conteúdos do Internet Explorer.
Nos projetos que participo tenho utilizado um arquivo JavaScript (AC_RunActiveContent.js) proposto pela própria Adobe (http://www.adobe.com/devnet/activecontent/articles/devletter.html), que é bem simples e fácil de usar. Como os “embeds” dos arquivos em Flash em um projeto costumar ter as mesmas propriedades (de tamanho, cor e afins), também crio um JavaScript adicional – e é ele que chamamos em nossas páginas HTML. Por exemplo:
function embedFlash(url) {
AC_FL_RunContent(
‘codebase’,’http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0′,
‘width’,’100%’,
‘height’,’100%’,
‘src’,url,
‘quality’,’high’,
‘pluginspage’,’http://www.macromedia.com/go/getflashplayer’,
‘movie’,url,
‘allowScriptAccess’,’sameDomain’,
‘bgcolor’,’#ffffff’,
‘wmode’,false
);
}
Essa função pode ser customizada, como por exemplo, adicionar parâmetros de tamanho, transparência e afins, de acordo com as necessidades. Para utilizar, em páginas HTML, basta importar as funções e chamar a função embedFlash():
<script type=”text/javascript” src=”AC_RunActiveContent.js”>
<script type=”text/javascript” src=”EmbedFlash.js”>
<script type=”text/javascript”>embedFlash(‘Aplicacao.mxml?paramID=33’);
Note que para a função embedFlash() acima, personalizada, não há necessidade de passar a extensão do arquivo, e portanto o mesmo é valido para o método AC_FL_RunContent(), da própria Adobe. Este método adiciona a extensão “.swf” automaticamente. No caso do Flex 1.5, como os arquivos são compilados no servidor, acessa-se “App.mxml.swf”, por isso da extensão .mxml no exemplo acima. No caso de arquivos compilados localmente, como no Flex Builder 2, não haveria extensão, por exemplo. Vejam também que é possível passar parâmetros via URL.
O pessoal da área de TI pode reverter a atualização nas máquinas dos usuários (dos que tem a máquina atualizada), mas também é responsabilidade dos desenvolvedores atualizarem seus códigos, ainda mais com o grande prazo de divulgação das informações antes da efetiva atualização do Internet Explorer.
Vale notar que o Dreamweaver possui uma atualição (8.02) que converte páginas (html, cfm, etc) automaticamente, facilitando o trabalho de quem tem muitas páginas para converter.
Andei fazendo umas pesquisas e encontrei um script um pouco mais facil de utilizar. Nele não precisa modificar os codigos de carregamento do activex, basta apenas chamar o script na pagina q ele automaticamente ativa todos.
Crie um arquivo chamado: dynActiveX.js com o seguinte conteúdo:
—————————————–
/// When the page loads:
window.onload = function(){
if (document.getElementsByTagName) {
// Get all the tags of type object in the page.
var objs = document.getElementsByTagName(“object”);
for (i=0; i
Até mais ai pessoal..!
Pessoal,
testei esse código do Weverton e não está funcionando não sei pq!! mas procurei e achei outro com o código um pouco diferente q funciona:
// When the page loads:
window.onload = function(){
if (document.getElementsByTagName) {
// Get all the tags of type object in the page.
var objs = document.getElementsByTagName(“object”);
for (i=0; i do html:
vlw!!
Aí, estou tendo este problema com o active, porem nao consegui resolver. Eu devo criar um arquivo js com o codigo acima neh ?… e como eu faço para chamar este código pelo html, teria como colocar aqui bem certinho como que eu faço isto…. vlw.. é que eu nao saco de programar e sim de desenhar… 🙁
aí, instalei o dreamweaver e funfou !! só que qunado faço o upload para o servidor, o flash nao parece no ie 🙁 … o que pode ser isto ?
Pessoal,
o pessoal coloca código sem saber se vai funcionar. É foda. Testei tudo que foi falado aí em cima a nada funcionou. Achei uma resolução definitiva. O código é um pouquinho diferente.
Coloquem isso antes da tag :
Daí, criem o arquivo dynActiveX.js com o seguinte conteúdo:
// When the page loads:
window.onload = function(){
if (document.getElementsByTagName) {
// Get all the tags of type object in the page.
var objs = document.getElementsByTagName(“object”);
for (i=0; i
Marcelo, você teve dificuldades em utilizar o script da Adobe? Eu e minha equipe temos utilizado ele com sucesso em nossas aplicações, como descrito acima, utilizando o método “AC_FL_RunContent”. O technote da Adobe dá mais detalhes do funcionamento.
relamente tb nao consegui acho que tem um erro no script ou simplesmente falta algo na chamada do flash. vocês poderiam colocar um link como exemplo?
Caros, no link que coloquei para o site da Adobe (http://www.adobe.com/devnet/activecontent/articles/devletter.html) há explicações, códigos e exemplos, inclusive passo a passo. Basta segui-los corretamente para contornar o problema.
ae pessoal…
corrigi o codigo acima que realmente estava com erro no “for”
funciona mas como ele troca o flash por ele mesmo no load da pagina ele pisca o flash…mas funciona…
// When the page loads:
window.onload = function(){
if (document.getElementsByTagName) {
// Get all the tags of type object in the page.
var objs = document.getElementsByTagName(“object”);
for (i=0; i
Solução final com validação W3C !
http://www.bryntec.com/viewtopic.php?id=161
Pessoal, tenho o update para a versão 8.0.2 do DW, tenho uma mesma animação em um site funciona e no outro ela não é carregada com esse js. Alguém sabe se é algum conflito referente a CSS ou algo do gênero?
na verdade o proprio flash faz o trabalho disso sem colocar a mao em codigo!
http://www.brunodulcetti.com/blog/2006/04/19/mudancas-no-ie-activex.html
no link acima vcs vão ver!!! até +
Pitter, realmente o Flash tem um update para isso, assim como o Dreamweaver. Isso está no link que citei no post. Mas nem sempre o HTML que irá para o srevidor é o gerado pelo Flash ou pelo Flex 1.5. Assim, uma solução flexível – como utilizar manualmente o JavaScript que a Adobe disponibiliza – é muito útil nos projetos.
Tudo 10 fiz o que disseram e até funcionou..
Mas lanço uma dúvida que deixarão vcs de cabeça quente…
Como fazer tudo isso em uma layer (div)???
Usei o código da Adobe e funcionou perfeitamente.
galera eu não entendo nada de programação:
eu to construindo um site, ele tem imagens cambiaveis e scripts que pedem pra ser ativados:
como faço pra criar esse arquivo js e como chamo ele no meu html. valeu