2009-06-05 20 views
2

I habe:Ausführen von JavaScript aus einem -Frame

  1. ein Web-Server (Server 1)
  2. Ein Anwendungsserver einige Tiere von einer Legacy-Webanwendung (Server 2)
  3. ein iFrame auf dem Server ausgeführt werden 1 Ziehen in der Anwendung von Server 2

Mein Problem ist:

Das Vermächtnis App nutzt JS Validierung auf seinen Formen. Wenn ein Benutzer versucht, ein unvollständiges Formular zu senden, wird eine Warnung angezeigt, die den Benutzer darüber informiert, dass es sich um einen Dummy handelt. Dies schlägt natürlich fehl, wenn die App innerhalb eines Iframes ausgeführt wird, da Server 1 und Server 2 in unterschiedlichen Domänen leben.

Ich habe versucht, die folgenden Proxy-Richtlinien über die Server-Einstellung 1:

ProxyPass /legacy_app http://server2.url/legacy_app 
ProxyPassReverse /legacy_app http://server2.url/legacy_app 

Ich bin jetzt in der Lage, die iframe von http://server1.url/legacy_app, aber ich bin noch nicht dienen Javascript innerhalb dieser iframe auszuführen - ich die gleichen Sicherheits/Zugriffsfehler wie bei der Ausführung der App in einer anderen Domäne.

Gibt es noch etwas, das ich ausprobieren kann?

+0

Welche Web-Server haben Sie? –

Antwort

0

Haben Sie versucht, das Skript innerhalb einer .js-Datei zu hosten, die auf Server # 1 gehostet wird, aber aus dem iframe (referenziert aus Server # 2) heraus läuft?

Ich denke, ein Browser ist in Ordnung mit Verweis auf eine externe Website, aber es mag es nicht, wenn es von einer externen Site referenziert wird.

Ich habe es nicht selbst ausprobiert, aber ich glaube, das ist, wie ich von dieser Art von Problem gehört habe. Ich weiß, dass dies die Methode ist, die Google Analytics verwendet - Sie müssen die .js-Datei von den Google-Servern anfordern, aber sobald sie dort ist, hat sie Zugriff auf den Browser.

1

Wie überprüft die Legacy-App, ob die Felder ausgefüllt sind? Einfaches Javascript? Ajax?

Die Alarmbox selbst sollte noch funktionieren. Ich denke, der Code für die Bestimmung, ob der Alarm ausgegeben werden sollte, könnte sein, was kaputt ist.

Ausführen den folgenden Code auf meinem lokalen Apache-Server gibt mir immer noch die Warnung Beiladen auch wenn die Seite auf einer Remote-Host ist:

<html> 
    <body> 
    <div> 
     <iframe src="http://www.crowderassoc.com/javascript/alertbox.html" width="300" height="200"> 
    </div> 
    </body> 
</html> 

Versuchen Sie den obigen Code zu einer Seite auf Server # 1 zu kopieren und sehen wenn Sie die Alarmbox von dieser Gegenstelle im Iframe erhalten.

0

Joe, ich denke, Sie haben Recht. Ein kurzer Test mit anderen Servern zeigt, dass ich Alarme von entfernt gehosteten Skripten ganz einfach auslösen kann.

Der Legacy-Server ist der Client und wir haben keinen einfachen Zugriff darauf, aber bei einem Blick auf seine JS sieht es so aus, als würden sie eine Cross-Site-/Framing-Erkennung durchführen - eine weitere Untersuchung wert.

0

Ich hatte diese Situation in der Vergangenheit, wo ich versuchte, eine App um eine schwer scripted bestehende Anwendung auf einem Remote-Server zu bauen, und die App würde gut laufen, wenn es in einem eigenen Fenster geöffnet wurde, aber Wenn ich es in einen Rahmen laden würde, würde es brechen.

Was ich für dieses Projekt getan habe, war das Öffnen der lokalen Anwendung in einem Popup mit einer Breite von 495 Pixeln, das Laden der externen App in das Hauptfenster (bereits vorhanden), die Größe des Hauptfensters der externen App auf den Bildschirm width minus 495px und Positionierung der Fenster nebeneinander auf dem Bildschirm. Dies gab dem Endbenutzer einen ähnlichen Effekt wie ich es mit Rahmen versucht hatte, nur dass es funktionierte.

Falls es, hier hilft, ist der Code, den ich aus meiner Datei index.php verwendet:

// Manipulating the current window 
window.location.href = 'http://www.someExternalApp.com'; // setting the page location. 
window.name = 'legacyapp'; // setting the window name just the for heck of it. 
moveTo(0,0); // moving it to the top left. 

// Resizing the current window to what I want. 
mainWindowWidth = screen.width - 495; 
mainWindowHeight = screen.height; // Makes the window equal to the height of the users screen. 
resizeTo(mainWindowWidth,mainWindowHeight); 

// function for opening pop-up 
function openWin(){ 
    win2 = window.open(page,'',winoptions); 
    win2.focus(); 
} 

// internal app location (for use in pop-up) 
page = 'someLocalApp.php'; 

// internal app Window Options (for pop-up) 
winoptions = 'width=490,height='+mainWindowHeight+',top=0,left='+mainWindowWidth+'leftscrollbars=1,scrolling=1,scrollbars=1,resizable=1,toolbar=0,location=0,menubar=0,status=0,directories=0'; 

// Opens the local app pop-up 
openWin(); 
Verwandte Themen