Frage

Unter bestimmten Bedingungen, ich habe eine Webseite, die in einem Iframe geöffnet werden. Wenn es in diesem iframe geladen wird, muss ich es aus dem Fenster Lage auf eine Ressource setzen, eine Datei (all dies in einem Versuch, ein Update für ein Greasemonkey-Skript zu machen ... alles echt, btw) zum Download bereit. Leider, wenn ich tun:

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

Ich erhalte eine Fehlermeldung besagt, dass Top-null ist. wenn „Fenster“ anstelle von „oben“ verwenden, lädt Firefox meinen Skript Text in das iframe, aber Greasemonkey ist nicht in der Lage es als Update aus irgendeinem Grunde zu erkennen. Gibt es eine andere Methode, um das Fenster der Lage Einstellung, die ich irgendwie verpasst haben?

Edit: Die Nutzer von meinem Skript einen bestimmten Geschäfts Seite besuchen (zuerst). Mein Skript in die Seite geladen, um ein Firefox-Plugin namens Greasemonkey. Mein Skript erstellt einen iframe auf der besuchten Seite und lädt meine Seite (zweite) in dieses iframe. Greasemonkey lädt dann meinen Skript auf meine Seite, die einen Wert auf meiner Seite überprüft, ob das Skript aktualisiert wurde. Wenn das Skript aktualisiert wurde, muss ich von der Seite meiner Benutzer weg navigieren, die sie ursprünglich besuchten (merkt als „erster“), und auf einen anderen (dritten) Website (userscripts.org). Hoffentlich einige Verwirrung aufräumt.

War es hilfreich?

Lösung

Schließlich fand ich, dass Greasemonkey eine Funktion „GM_OpenInTab (url)“ bietet die in Firefox mit dem angegebenen URL einen neuen Tab öffnet. Dies ermöglicht es mein iframe eine neue Registerkarte mit der Lage des aktualisierten Skript zu öffnen für Greasemonkey zu aktualisieren. Dies ist zwar nicht genau die Lösung, die ich suchte, es funktioniert nahtlos ohne Fehler.

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

Vielen Dank an alle für Ihre Eingabe. Es ist möglich, dass Greasemonkey-Skripte irgendwie Sandkästen, diese Art von Verhalten zu verhindern, die für böswillige Zwecke verwendet werden könnte.

~ ~ md5sum

Andere Tipps

Die beiden Standorte müssen den gleichen Hostnamen (Domain) haben. Vielleicht möchten Sie statt parent mit top werden.

Sie könnten versuchen, die folgenden (angepasst von etwas, das ich verwenden):

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

Ich arbeitete mehrmals mit iframe, und ich fand es sicherer war mit dem Zustand des Dokuments zu arbeiten. Ich werde einen Code mit einem Beispiel übergeben.

In diesem Beispiel ich jQuery bin mit, ist aber für die Funktionalität nicht erforderlich.

<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; Arbeitete für meine in Greasemonkey.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top