2011-07-14 46 views
0

所以我可以在使用-stringByEvaluatingJavaScriptFromString:的UIWebView加載的頁面中運行Javascript,但那隻會在瀏覽器的頂部框架中運行Javascript。我可以通過window.frames從頂部框架導航到其他同域框架,但這對於不同域框架不起作用。有什麼方法可以訪問UIWebView中的不同域框架?我可以在UIWebView的不同域框架中注入/運行Javascript嗎?

我試過檢查參數到UIWebViewDelegate的-webViewDidFinishLoad:回調是否有不同的Javascript上下文,但它看起來像即使回調調用已完成加載JavaScript上下文的框架仍然是頂部框架。

感謝您的任何幫助。

回答

0

爲JavaScript幀之間的通信被限制爲幀具有負載從同一主機(具有相同的協議和端口)的內容安全原因。

所以你試圖做的事情可能是不可能的。但是,使用HTML5的功能稱爲postMessage,它允許跨不同主機進行通信。如果您可以控制要加載到Web視圖中的HTML內容,則可能需要檢查該內容。

+0

我明白,但我希望以某種方式讓我的應用程序在瀏覽器控件之外訪問控件內的框架。我正在瀏覽器上工作,而不是網站。 – Greg

0

我意識到這是前一段時間,但可以postMessage的你,如果你能控制孩子框架上JS的執行後,在做什麼。您可以使用它來有效地傳遞消息,因爲您可以圍繞其使用構建一個基本的信任模型,甚至可以安全地評估事物。

如果您從未找到解決方案,我會重溫@ joern的建議!

+0

我無法控制頁面中的HTML,因此我無法爲postMessage添加偵聽器。我希望有一些方法可以讓我在UIWebView的子框架中運行Javascript,但聽起來好像沒有。 – Greg

+0

有一種方法可以在UIWebView中執行JavaScript:stringByEvaluatingJavaScriptFromString(這裏記錄:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWebView_Class/Reference/Reference.html#//apple_ref/occ/instm/UIWebView/stringByEvaluatingJavaScriptFromString:) – peritus

相關問題