2013-11-16 3 views
1

Когда я пытаюсь получить доступ к этому:Доступ к IFrame WebBrowser приводит к несанкционированному доступу?

var anchors = webBrowser1.Document.Window.Frames[0].Document.GetElementsByTagName("a"); 

Я получаю несанкционированный доступ исключения. Что происходит!? Я могу просмотреть весь документ в обозревателе объектов, в то время как возникает исключение, я также могу вручную щелкнуть этот iframe внутри моего webBrowser1, но когда я попытаюсь получить доступ к нему внутри моего приложения, я получаю ошибку? Что это за колдовство?

+0

Перейдите на главную страницу и страницу внутри Iframe, принадлежащих к одному домену? –

+0

@YuriyGalanter: Я не уверен, почему это имеет значение, если webBrowser уже загрузил страницу? – ojek

+2

Я думаю, что вы, возможно, испытываете политику «Одинаковый исход», которая не позволяет межстраничной странице общаться в обычном браузере. Что касается webBrowser, вы пытаетесь получить доступ к странице из одного домена из другого –

ответ

1

Это связано с тем, что браузер не позволяет вам получать доступ к iframes из другого домена, это также происходит на сайтах https, где доменное имя такое же, к счастью, есть способ обойти это.

Вы можете получить содержимое IFrame с помощью JS после полной загрузки страницы.

Сначала загружает адрес страницы, которая имеет IFRAME внедренное:

webBrowser1.Navigate("https://www.example.com/pagecontaingiframe.html"); 
webBrowser1.DocumentCompleted += WebBrowserDocumentCompleted; 

Затем в документе завершения события, убедитесь, что IFrame URL загружен, а не оригинальный URL мы переходите к, когда мы имеем загрузите, используйте функцию eval в javascript, чтобы запустить собственный код, чтобы вытащить содержимое iframe.

void WebBrowserDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    // Optionally check that the url is the original document 
    // search for an iframe and its url here first. 
    // Then store the name and url for the next step 


    // And the magic begins 
    if (e.Url.AbsolutePath != new Uri("https://www.example.com/iframeyouneedurl.html").AbsolutePath) 
     return; 

    webBrowser1.DocumentCompleted -= WebBrowserDocumentCompleted; 

    string jCode = "var iframe = document.getElementsByName('iframe_element')[0]; var innerDoc = iframe.contentDocument || iframe.contentWindow.document; innerDoc.documentElement.innerHTML"; 
    string html = webBrowser1.Document.InvokeScript("eval", new object[] { jCode }); 
} 
+0

Я положил это все в form1_Load, и это дает мне ошибку – k961

+0

все еще дает мне ту же ошибку -> доступ запрещен, я могу получить iframe src, но я не могу прочитать содержимое http://paste.ubuntu.com/12708279/ – k961

Смежные вопросы