Pergunta

Em certas condições, eu tenho uma página web que se abriu em um iframe. Quando ele é carregado para que iframe, eu preciso dele para definir o local janela para um recurso para baixar um arquivo (tudo isso em uma tentativa de fazer uma atualização para um script GreaseMonkey ... tudo legítimo, btw). Infelizmente, quando eu faço:

top.location.href = "http://userscripts.org/...";

Eu recebo um erro dizendo que topo é nulo. quando se usa "janela" no lugar de "top", firefox carrega meu texto script no iframe, mas GreaseMonkey é incapaz de detectá-lo como uma atualização por algum motivo. Existe um outro método para definição da localização da janela que eu perdi de alguma forma?

Edit: Os usuários do meu script de visitar a página de um negócio específico (primeiro). Meu script é carregado para essa página usando um firefox plugin chamado GreaseMonkey. Meu script cria um iframe na página visitada, e carrega minha página (segundo) em que iframe. GreaseMonkey então carrega o meu script em minha página, que verifica um valor na minha página para ver se o script foi atualizado. Se o script foi atualizado, eu preciso navegar meus usuários para longe do local que originalmente visitou (anotado como "primeiro"), e para outro (terceiro) local (userscripts.org). Esperemos que este apura-se alguma confusão.

Foi útil?

Solução

Eu finalmente encontrei que GreaseMonkey oferece uma função de "GM_OpenInTab (url)", que abre uma nova guia no firefox com a URL especificada. Isso permite que o meu iframe para abrir uma nova guia com a localização do script atualizado para GreaseMonkey a atualização. Enquanto isso não é exatamente a solução que eu estava procurando, ele funciona perfeitamente sem erros.

GM_openInTab("http://userscripts.org/...") ;

Obrigado a todos por sua entrada. É possível que GreaseMonkey alguma forma scripts de caixas de areia para evitar esse tipo de comportamento que poderiam ser usados ??para fins maliciosos.

~ md5sum ~

Outras dicas

Os dois locais devem ter o mesmo nome de host (domínio). Você pode querer estar usando parent vez de top.

Você pode tentar o seguinte (adaptado do uso algo I):

function checkWebPage() {
    try {
        if (top != self) {
            top.location.href = "http://userscripts.org/...";
        } else {
            self.location.href = "http://userscripts.org/...";
        }
    } catch (e) {}
}

Eu trabalhei várias vezes com iframe, e eu achei que era mais seguro para o trabalho com o estado do documento. I vai passar um código com um exemplo.

Neste exemplo eu estou usando jQuery, mas não é necessário para a funcionalidade.

<head>
<script>
(function($) {
 $.documentCtrolState = function(d,f,t)
 {
    try{
      t=(typeof(t)=="undefined")?100:t;
      if (d.readyState=="complete") //the document has been completely loaded, successfully or unsuccessfully
         f(true);
      else
         setTimeout(function(){$.documentCtrolState.call(this,d,f,t);}, t);
    }catch(ex){
         f(false, ex);
    }
 };
})(jQuery);

$(function(){

   $myIframeRef = $(document.myIFrame);
   $myIframeRef.attr("src", "mypage.php");

   $.documentCtrolState($myIframeRef.window.document, ThenLoadIFrame, 100);

});

ThenLoadIFrame = function(state, ex)
{
   alert("State " + state);
}


</script>
</head>
<body>
<iframe src="" id="myIFrame"></iframe>
</body>

unsafeWindow.parent.location.href = url; Trabalhou para o meu em Greasemonkey.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top