簡體   English   中英

從iframe中執行javascript

[英]Executing javascript from within an iframe

我有:

  1. Web服務器(服務器1)
  2. 運行舊版Web應用程序的某些野獸的應用程序服務器(服務器2)
  3. 服務器1上的iframe從服務器2引入應用程序

我的問題是:

舊版應用程序在其表單上使用JS驗證。 當用戶嘗試提交不完整的表單時,會彈出警報,通知用戶他們是假人。 當然,當應用程序在iframe中運行時,此操作將失敗,因為服務器1和服務器2位於不同的域。

我嘗試在服務器1上設置以下代理指令:

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

現在,我可以從http://server1.url/legacy_app服務iframe,但仍無法在該iframe中執行javascript -與運行該應用程序時遇到的安全/訪問錯誤相同在不同的域上。

還有什么我可以嘗試的嗎?

舊版應用程序如何檢查框是否已填寫? 簡單的JavaScript? 阿賈克斯?

警報框本身仍應工作。 我正在考慮用於確定是否應發出警報的代碼可能已損壞。

即使頁面位於遠程主機上,在本地apache服務器上運行以下代碼仍然會給我onLoad警報:

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

嘗試將上述代碼復制到服務器#1上的頁面上,看看是否從iframe中的該遠程站點收到了警告框。

您是否嘗試過將腳本托管在服務器#1上托管的.js文件中,但用盡了iframe(服務器2引用了)?

我認為瀏覽器可以引用外部站點,但是當外部站點引用瀏覽器時,瀏覽器不喜歡它。

我自己還沒有嘗試過,但是我相信這就是我聽說正在解決的此類問題的方式。 我知道這是Google Analytics(分析)使用的方法-您必須從Google的服務器請求.js文件,但是一旦存在,它就可以訪問瀏覽器。

喬,我認為你是正確的。 對其他服務器的快速測試表明,我可以輕松觸發來自遠程托管腳本的警報。

傳統服務器是客戶端的服務器,我們無法輕松訪問它,但是瀏覽他們的JS似乎他們在進行某種跨站點/框架檢測-值得進一步研究。

過去我曾遇到過這種情況,當時我試圖在遠程服務器上圍繞大量腳本編寫的現有應用程序構建應用程序,如果在自己的窗口中打開該應用程序,它將運行正常,但是如果我嘗試加載它變成一個框架,它將破裂。

我最終為該項目所做的工作是在一個寬度為495px的彈出窗口中打開本地應用程序,將外部應用程序加載到主(已經存在)窗口中,將外部應用程序主窗口的大小調整為屏幕寬度減去495px,並將窗口並排放置在屏幕上。 這給了最終用戶一個與我一直嘗試使用框架的效果相似的效果,但只有它起作用了。

如果有幫助,這是我在index.php文件中使用的代碼:

// 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM