Domanda

In determinate condizioni, ho una pagina web che si apre in un iframe. Quando viene caricato in quell'iframe, ne ho bisogno per impostare la posizione della finestra su una risorsa per scaricare un file (tutto questo nel tentativo di effettuare un aggiornamento per uno script GreaseMonkey ... tutto legittimo, a proposito). Sfortunatamente, quando lo faccio:

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

Viene visualizzato un errore che indica che top è null. quando si utilizza " finestra " al posto di "top", firefox carica il mio testo di script nell'iframe, ma GreaseMonkey non è in grado di rilevarlo come aggiornamento per qualche motivo. C'è un altro metodo per impostare la posizione della finestra che mi sono perso in qualche modo?

Modifica: gli utenti del mio script visitano la pagina di un'azienda specifica (prima). Il mio script viene caricato in quella pagina usando un plugin firefox chiamato GreaseMonkey. Il mio script crea un iframe sulla pagina visitata e carica la mia pagina (seconda) in quell'iframe. GreaseMonkey carica quindi il mio script sulla mia pagina, che controlla un valore sulla mia pagina per vedere se lo script è stato aggiornato. Se lo script è stato aggiornato, devo allontanare i miei utenti dal sito che hanno visitato originariamente (indicato come "primo") e verso un altro (terzo) sito (userscripts.org). Spero che questo chiarisca un po 'di confusione.

È stato utile?

Soluzione

Ho finalmente scoperto che GreaseMonkey offre una funzione " GM_OpenInTab (url) " che apre una nuova scheda in Firefox con l'URL specificato. Ciò consente al mio iframe di aprire una nuova scheda con la posizione dello script aggiornato per l'aggiornamento di GreaseMonkey. Anche se questa non è esattamente la soluzione che stavo cercando, funziona perfettamente senza errori.

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

Grazie a tutti per il vostro contributo. È possibile che GreaseMonkey in qualche modo sandbox gli script per impedire quel tipo di comportamento che potrebbe essere utilizzato per scopi dannosi.

~ ~ md5sum

Altri suggerimenti

Le due posizioni devono avere lo stesso nome host (dominio). Potresti voler usare parent invece di top .

Potresti provare quanto segue (adattato da qualcosa che uso):

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

Ho lavorato diverse volte con iframe e ho scoperto che era più sicuro lavorare con lo stato del documento. Passerò un codice con un esempio.

In questo esempio sto usando jQuery, ma non è necessario per la funzionalità.

<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; Ha funzionato per il mio in Greasemonkey.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top