"указанное приведение недопустимо" при использовании execScript - PullRequest
2 голосов
/ 25 октября 2011

Я пытаюсь выполнить скрипт в iframe внутри IE, но я все время получаю «указанное приведение неверно»:

IWebBrowser2 iWebBrowser2 = GetIframe(); //retrieve the iframe (saved in document complete event) 
IHTMLDocument2 document = iWebBrowser2.Document as IHTMLDocument2; 
document.parentWindow.execScript("alert('test');", "javascript"); 

Проблема возникает, когда я пытаюсь получить доступ к document.parentWindow (даже спрашивая, есть ли document.parentWindow! = Null).

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

Можете ли вы помочь мне с этой проблемой?

Спасибо

Омри

Ответы [ 3 ]

2 голосов
/ 04 ноября 2011

Я подозреваю, что проблема связана с потоком.Вы не можете просто получить доступ к интерфейсам MSHTML из разных потоков, по крайней мере, не сделав несколько маршалинг.Попробуйте вызвать свой код в «потоке событий завершения документа», который также называется основным потоком.

1 голос
/ 27 декабря 2011

Учли ли вы тот факт, что iframes загружаются асинхронно в основной документ?Это означает, что даже при том, что documentCompleted, возможно, сработал для основного документа, iframes, скорее всего, все равно не будут загружены в течение нескольких секунд в будущем.Сложно сказать, загружен ли iframe или нет, но вы можете протестировать свой метод, введя искусственную задержку (а-ля Timer) перед тем, как вы его на самом деле вызовите, чтобы разрешить первой загрузке iframe.Надеюсь, это поможет.

1 голос
/ 25 октября 2011

Хотя я работал с IE, прежде чем я не совсем знаком с этим конкретным вариантом использования. Некоторое быстрое прибегание к поиску вызывает интересную заметку:

http://msdn.microsoft.com/en-us/library/aa752116(v=vs.85).aspx

Предупреждение Если тип объекта документа небезопасен для сценариев, этот метод успешно завершается, но для ppDisp устанавливается значение NULL.

Если вы не безопасны для сценариев и iWebBrowser2.Document имеет значение null, это может быть причиной вашей проблемы?

...