簡體   English   中英

自定義IInternetSecurityManager沒有通過對話框調用

[英]Custom IInternetSecurityManager not being called with dialogs

您好,謝謝您的光臨。

問題描述:

我已經實現了帶有嵌入式瀏覽器控件的ac#WinForm應用程序,並且已經實現了IInternetSecurityManager來執行我們需要的任務,以允許使用我們本地安裝的網頁在iframe中進行跨域訪問。

IInternetSecurityManager,IOleClientSite,IDocHostShowUI和IDocHostUIHandler一切正常。 換句話說,我們所有的實現都被瀏覽器控件調用。

問題是當加載到瀏覽器控件中的網頁具有調用window.showModalDialog()的腳本時:正在使用的瀏覽器控件實例不再與我們的客戶端站點通信。 在上面提到的任何接口中,絕對不會調用QueryInterface調用或任何其他方法。

我假設對話框中的文檔未使用我們的安全管理器實現,因為IE顯示的對話框中的Web瀏覽器控件與我們調用SetClientSite()的控件不同。

題:

我們如何與這個新的瀏覽器控件對話? 我們需要能夠在IE(我們的IInternetSecurityManager實現)顯示的對話框中為瀏覽器提供控制。 但是,可以這么說,我們從來沒有機會向我們介紹客戶網站。 換句話說,沒有來自IE的通訊通過界面顯示“我是IE創建的新瀏覽器控件,這是我的IUnknown界面。這是設置我的客戶端站點的機會,等等。” 如果有來自IE的通知,我們將很高興。

結果是使用了兩個不同的安全上下文,並且在我們使用iframe進行對話時,我們的應用程序都會失敗,因為沒有使用IInternetSecurityManager實現。

示例源代碼:

我精心挑選了源代碼來保護無辜的用戶:),並簡化為我認為可以在其自己的Visual Studio 2010解決方案中使用的東西。

請閱讀ReadMe.txt文件,以獲取有關該問題,再現步驟等的信息。

我編寫的測試網頁顯示了信息和指導您使用示例的步驟。

如果您對我要完成的工作有疑問或樣本不夠清楚,請告訴我。

請指教。 謝謝。

http://home.comcast.net/~lowrider2112/bin/TestIEHost.rar

您可以覆蓋Web瀏覽器的控制方法CreateWebBrowserSiteBase

protected override WebBrowserSiteBase CreateWebBrowserSiteBase()
{
    return new ExtendedWebBrowserSite(this);
} 

並像這樣實現ExtendedWebBrowserSite

class ExtendedWebBrowserSite : WebBrowser.WebBrowserSite,
    IDocHostShowUI,
    IfacesEnumsStructsClasses.IServiceProvider,
    IInternetSecurityManager
    ...

那可以調用類IInternetSecurityManager

一種選擇是使用另一個自定義安全性WebBrowser控件創建您自己的對話框表單(使用C#)。 然后,您可以從Java腳本調用C#來打開表單,而不必使用showModalDialog。

暫無
暫無

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

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