Firefox sem política de mesma origem

4

Eu tenho um problema cada vez mais frustrante com a implementação do firefox da mesma política de origem.

Estou desenvolvendo um sistema integrado com suporte a touchscreen, e temos a opção do usuário de carregar páginas da web em iframes em vários locais na tela. As páginas da web podem ser qualquer tipo de páginas da web de qualquer tipo de domínio e local (google, yahoo, páginas da intranet, etc.) e aqui reside o meu problema.

Eu preciso adicionar um evento onclick ao iframe, que me fornece 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 são configuradas para um intervalo de atualização automática fixo que deve ser interrompido na atividade.

Eu li quase tudo que o Google me devolve (mas eu adoraria ser desaprovado nessa questão) e descobri que essa é a melhor solução (entre muitas outras):

<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á a permissão regular negada para o link para obter a propriedade Window.document de link

Eu sei por que recebo essa mensagem de erro e minha pergunta é simples. Como posso removê-lo?

É um sistema integrado, eu posso compilar o firefox a partir da fonte, eu posso editar o código fonte se necessário, eu posso mudar prefs.js etc. mas eu preciso usar o firefox (eu sei que todos os outros navegadores interruptor de linha de comando para desligá-lo ...), mas temos uma integração (bastante) apertada com a plataforma do firefox que seria difícil de remover.

Atualmente, usamos o Firefox v.3.5.16 (eu sei que é o EOL, vamos atualizá-lo em outro momento) em uma plataforma Debian Squeeze. Se necessário, posso atualizar para uma versão mais recente do Firefox, mas pelo que descobri, parece piorar ainda mais neste assunto.

TL; DR Ajude-me a fechar a política de mesma origem, em qualquer maneira possível no Firefox 3.5.16 para uma plataforma integrada que precisa alterar o código através de iframes entre domínios.

    
por Knuwgljung 08.05.2012 / 12:37

1 resposta

2

Eu me sinto muito idiota.

Funciona quando você usa UniversalXPConnect em vez de UniversalBrowserWrite.

Por exemplo: netscape.security.PrivilegeManager.enablePrivilege ("UniversalXPConnect");

Além disso, você pode não usar this.id ou this.parentNode.id, que ainda fornece um erro de acesso (diferente). Para derrotar esse problema, armazene-o primeiro em uma variável temporária:

onload='var tempstuff = this.id; this.contentWindow.document.addEventListener("click", function(event) {alert(tempstuff);}, false)'
    
por 08.05.2012 / 20:45