Пользовательский IInternetSecurityManager не вызывается с помощью диалогов - PullRequest
0 голосов
/ 14 февраля 2011

Здравствуйте и спасибо за поиск.

Описание проблемы:

Я реализовал приложение c # WinForm со встроенным элементом управления браузером и внедрил IInternetSecurityManager для выполнения задач, которые нам нужны, чтобы разрешить междоменный доступ в фреймах с нашими локально установленными веб-страницами.

Все работает как положено с IInternetSecurityManager, IOleClientSite, IDocHostShowUI и IDocHostUIHandler. Другими словами, браузер вызывает нас для всех наших реализаций.

Проблема в том, что на веб-странице, загруженной в элемент управления браузера, есть скрипт, который вызывает window.showModalDialog (): используемый экземпляр элемента управления обозревателем больше не связывается с нашим клиентским сайтом. Абсолютно никакие вызовы QueryInterface или любые другие методы не вызываются ни в одном из интерфейсов, упомянутых выше.

Документ в диалоговом окне не использует реализацию нашего менеджера безопасности, я предполагаю, потому что элемент управления веб-браузером в диалоговом окне, отображаемом IE, отличается от того, который мы называли SetClientSite ().

Вопрос:

Как мы общаемся с этим новым браузером? Нам нужно предоставить браузеру возможность управления в диалоговом окне, отображаемом IE, нашей реализацией IInternetSecurityManager. Но мы так и не получили возможность рассказать об этом нашему клиентскому сайту, так сказать. Другими словами, IE не сообщает нам об этом через интерфейс, который говорит: «Я - новый элемент управления браузером, созданный IE, и вот мой интерфейс IUnknown. Это ваш шанс настроить мой клиентский сайт и т. Д.» Мы были бы счастливы, если бы пришло такое уведомление от IE.

В результате используются два разных контекста безопасности, и наше приложение перестает работать каждый раз, когда мы в диалоге используем iframe, потому что наша реализация IInternetSecurityManager не используется.

Пример исходного кода:

Я выбрал исходный код для защиты невинных людей :) и сократил до того, что, как мне кажется, вы можете работать в его собственном решении Visual Studio 2010.

Пожалуйста, прочитайте файл ReadMe.txt для получения информации о проблеме, действиях по воспроизведению и т. Д.

На тестовых веб-страницах, которые я написал, отображаются информация и инструкции по использованию образца.

Пожалуйста, дайте мне знать, если у вас есть вопросы о том, что я пытаюсь выполнить, или если образец недостаточно ясен.

Пожалуйста, сообщите. Спасибо.

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

Ответы [ 2 ]

1 голос
/ 25 сентября 2012

Вы можете переопределить метод управления веб-браузера CreateWebBrowserSiteBase.

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

и реализовать ExtendedWebBrowserSite следующим образом:

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

Это может вызвать класс IInternetSecurityManager.

0 голосов
/ 17 января 2012

Один из вариантов - создать собственную диалоговую форму (в C #) с другим пользовательским элементом управления WebBrowser.Затем вы можете позвонить из Javascript в C #, чтобы открыть форму вместо использования showModalDialog.

...