
Tenho um problema cada vez mais frustrante com a implementação da política de mesma origem no Firefox.
Estou desenvolvendo um sistema integrado com suporte a touch screen, e temos a opção do usuário de carregar páginas web em iframes em diversos locais da tela. As páginas da web podem serqualquertipo de páginas da web de qualquer tipo de domínio e local (google, yahoo, páginas de intranet, etc.) e é aqui que reside o meu problema.
Preciso ser capaz de adicionar um evento onclick ao iframe, que me forneça o ID do iframe (ou algum outro identificador exclusivo) como resposta. Isso me diz que a atividade (navegação na web) está em andamento no iframe e que o iframe não deve ser recarregado (as páginas estão configuradas para um intervalo fixo de atualização automática que deve ser interrompido na atividade.
Eu li quase tudo que o Google me retorna (mas adoraria ser refutado nesse assunto) e descobri que esta é a melhor (entre muitas outras) solução:
<iframe src='http://google.com' id='iframe1' onload='netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite"); this.contentWindow.document.addEventListener("click", function(event) {alert(this.id);}, false)'></iframe>
Isso só me dá o normalpermissão negada parahttp://localhostpara obter a propriedade Window.document dehttp://google.com
Eu seipor queRecebo esta mensagem de erro e minha pergunta é simples. Como faço para removê-lo?
É um sistema integrado, posso compilar o Firefox a partir do código-fonte, posso editar o código-fonte se necessário, posso alterar o prefs.js etc., mas preciso usar o Firefox (sei que todos os outros navegadores sensatos têm uma boa opção de linha de comando para desligá-lo...), mas temos uma integração (bastante) forte com a plataforma Firefox que seria difícil de remover.
Atualmente usamos o Firefox v.3.5.16 (eu sei que é EOL, vamos atualizá-lo em outra ocasião) em uma plataforma Debian Squeeze. Se necessário, posso atualizar para uma versão mais recente do Firefox, mas pelo que descobri, parece ainda pior neste assunto.
DR Ajude-me a fechar a política de mesma origem, emde qualquer maneira possívelno Firefox 3.5.16 para uma plataforma integrada que precisa alterar o código por meio de iframes entre domínios.
Responder1
Eu me sinto muito estúpido.
Funciona quando você usaConexão UniversalXPem vez de UniversalBrowserWrite.
Por exemplo: netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
Além disso, você podenãouse this.id ou this.parentNode.id, que ainda dá um erro de acesso (diferente). Para resolver esse problema, basta armazená-lo primeiro em uma variável temporária:
onload='var tempstuff = this.id; this.contentWindow.document.addEventListener("click", function(event) {alert(tempstuff);}, false)'