Обновление iFrame в элементе управления веб-браузера

С# Visual Studio 2010

У меня есть сложная веб-страница, содержащая несколько фреймов, которые я загружаю в элемент управления веб-браузером. Я пытаюсь найти способ обновить один из фреймов, когда пользователь нажимает кнопку в форме окна.

Я не могу найти ничего конкретного для обновления одного iframe. Любые идеи?


person Josh    schedule 12.08.2010    source источник


Ответы (2)


Изнутри DOM вы можете просто вызвать:

document.getElementById([FrameID]).contentDocument.location.reload(true);

Используя элемент управления WebBrowser, вы можете самостоятельно выполнить javascript, используя метод InvokeScript документа:

browser.Document.InvokeScript([FunctionName], [Parameters]);

Объедините эти две концепции, написав собственную функцию на родительской странице:

function reloadFrame(frameId) {
    document.getElementById(frameId).contentDocument.location.reload(true);
}

И вызовите это в своем коде С#:

browser.Document.InvokeScript("reloadFrame", new[] { "myFrameId" });
person Kirk Woll    schedule 13.08.2010
comment
Я немного не понимаю, как это будет работать. У меня нет контроля над веб-страницей, которая загружается в элемент управления веб-браузером. Похоже, что для работы этого решения на страницу необходимо добавить функцию javascript reloadFrame. Это верно? - person Josh; 13.08.2010
comment
Это я и имел в виду, да. Думал, что у вас есть контроль над страницей с помощью iframe. Извините не смог помочь. - person Kirk Woll; 13.08.2010
comment
Не беспокойтесь, я ценю ваши мысли. У кого-нибудь еще есть идеи? - person Josh; 13.08.2010

Как насчет использования MSHTML и < метод href="http://msdn.microsoft.com/en-us/library/aa703645(v=VS.85).aspx" rel="nofollow noreferrer">reload метода IHTMLLocation. Вы должны добавить ссылку на Microsoft.mshtml, а затем попробовать:

IHTMLDocument2 doc = webBrowser1.Document.Window.Frames["MyIFrame"].Document.DomDocument as IHTMLDocument2;
IHTMLLocation location = doc.location as IHTMLLocation;

if (location != null)
    location.reload(true);

Значение true перезагружает страницу с сервера, а false извлекает ее из кеша.

person Garett    schedule 14.08.2010
comment
Я получаю исключение UnauthorizedAccessException в первой строке. В доступе отказано. Чего мне не хватает, чтобы получить доступ к этой части DOM? - person TheHolyTerrah; 30.11.2010
comment
Я вижу, что есть проблемы с межфреймовым скриптингом, касающиеся безопасности. Есть ли способ обойти это? Я просто хочу перезагрузить кадр. - person TheHolyTerrah; 01.12.2010