2016-08-09 47 views
0

Können Sie JQuery für eine Fensterreferenz verwenden? Ich habe folgendes ohne Glück versucht.Verwenden von JQuery für eine Fensterreferenz?

function GetDiPSWindow() { 
    var DiPSURL = "/DiPS/index"; 
    var DiPSWindow = window.open("", "DiPS", "toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=no,width=520,height=875"); 
    if (DiPSWindow.location.href === "about:blank") { 
     DiPSWindow.location = DiPSURL; 
    } 
    return DiPSWindow; 
} 

function AddRecipient(field, nameId) { 
    // Get window 
    var win = GetDiPSWindow(); 

    // Attempt 1 
    $(win.document).ready(function() { 
     var input = win.document.getElementById(field + "_Input"); 
     input.value = nameId; 
    }); 

    // Attempt 2 
    $(win).ready(function() { 
     var input = win.document.getElementById(field + "_Input"); 
     input.value = nameId; 
    }); 

    // Attempt 3 
    $(win).load(function() { 
     var input = win.document.getElementById(field + "_Input"); 
     input.value = nameId; 
    }); 
} 

Mache ich einen einfachen Fehler?

BEARBEITEN Aus irgendeinem Grund ist win.document.readyState "vollständig". Nicht sicher, ob das einen Unterschied macht.

Ich habe auch versucht:

Ansicht enthält:

<script>var CallbackFunction = function() {}; // Placeholder</script> 

Die Methode:

function AddRecipient(field, nameId) { 
    var DiPSURL = "/DiPS/index"; 

    if (deliveryChannel === undefined) { 
     deliveryChannel = 0; 
    } 

    var DiPSWindow = GetDiPSWindow(); 
    if (DiPSWindow.location.href === "about:blank") { 
     DiPSWindow.location = DiPSURL; 
     DiPSWindow.onload = function() { DiPSWindow.CallbackFunction = AddRecipient(field, nameId) } 
    } else { 
     var input = DiPSWindow.document.getElementById(field + "_Input"); 
     input.value = input.value + nameId; 
     var event = new Event('change'); 
     input.dispatchEvent(event); 
    } 
} 
+0

Nicht vollständig. Intern nimmt jquery automatisch das lokale 'Dokument' und nicht das, was Sie für .ready übergeben. Andere Methoden können jedoch funktionieren. Um die volle Funktionalität zu erhalten, würde ich vorschlagen, dass das Fenster eine eigene Kopie von jQuery geladen hat. –

+0

@KevinB sagen, es ist nicht möglich in einer Antwort und ich werde es akzeptieren lol –

Antwort

0

Die Antwort ist .... irgendwie. Es hängt davon ab, was Sie tun. Sie können jquery auf der übergeordneten Seite verwenden, um mit einer Seite innerhalb eines iframes zu interagieren. Alles, was mit dem Dokumentobjekt des iframes arbeiten muss, funktioniert jedoch möglicherweise nicht ordnungsgemäß, da jQuery eine Referenz des Dokuments enthält, in dem es enthalten war und verwendet wird es an verschiedenen Orten, einschließlich bei der Verwendung von Dokumenten bereit Handler. Sie können also nicht an den document ready-Handler des iframe binden, jedoch können Sie andere Event-Handler binden, und Sie können auf das load-Ereignis des iframes warten, um zu wissen, wann es absolut sicher ist, mit dem Dokument zu interagieren.

Es wäre jedoch einfacher, nur jquery in den iframe selbst aufzunehmen und stattdessen zu verwenden. Es sollte auf jeden Fall zwischengespeichert werden, so dass die Performance dadurch nicht beeinträchtigt wird.