相关疑难解决方法(0)

如何在C++中调用IE中的eval()?

随着IE11的出现,IHTMLWindow2::execScript()不推荐使用.推荐的方法是使用eval()代替.我通过其C++ COM接口自动化IE,我一直无法找到如何实现这一点.有人能指出我在搜索中明显错过的例子吗?如果无法执行代码eval,那么将JavaScript代码注入到现在execScript不再可用的Internet Explorer实例中的适当方法是什么?

编辑:任何适用于我正在进行的项目的解决方案必须在进程外工作.我没有使用浏览器助手对象(BHO)或任何类型的IE插件.因此,任何涉及无法正确编组交叉过程的接口的解决方案都不适用于我.

c++ com internet-explorer

13
推荐指数
1
解决办法
5723
查看次数

更新窗口后,Browser.ExecScript()停止工作

我为WatiN(版本2.1)设置了一个简单的测试平台,其中包括:

var browser = new IE();

browser.GoTo("http://www.google.co.il"); // webpage doesn't matter really
browser.RunScript("alert(123)");
Run Code Online (Sandbox Code Playgroud)

仅当未安装KB3025390时,此方法才有效.安装它会破坏上面的测试,其中包含HRESULT设置为E_ACCESSDENIED的UnAuthorizedAccessException.是什么赋予了?有没有解决方法?

更新:使用IWebBrowser2.Navigate2和"javascript:console.log(123)"类型的脚本工作但是

  • 使用这样的反向通道让我感到不安
  • 通过.Navigate2()的反向通道运行的脚本可能只有大约2070个字符的最大长度(给予或接受),否则它们会被强制截断为此长度,导致尝试运行它们时出现javascript错误
  • 即使使用最简单的脚本,使用.Navigate2()也会阻塞Internet Explorer的就绪状态,因为它将被设置为READYSTATE_LOADING而没有任何摆脱它的希望.简单来说,这意味着一旦你使用这个hack,你要么必须在WatiN中以"dont-wait-for-webpage-to-load"方式执行每一个后续操作(GoToNoWait,ClickNoWait等),以免你的代码冻结等待浏览器返回READYSTATE_COMPLETE(如前所述,这将永远不会出现).
  • 在这里似乎有一个更广泛的问题,我甚至无法访问IHtmlWindow2对象的属性pe window.document再次抛出一个未经授权的异常使得它几乎不可能转移到C#世界的返回值我正在运行的脚本(使用Expando等)来处理window.top.document以外的文件(对于window.top.document窗口,有IWebBrowser2.Document可以解决这个问题)

更新#2:selenium项目的人们也注意到了这个问题:

https://code.google.com/p/selenium/issues/detail?id=8302

还创建了一个错误报告:

https://connect.microsoft.com/IE/feedback/details/1062093/installation-of-kb3025390-breaks-out-of-process-javascript-execution-in-ie11

更新#3:IHTMLWindow2.setInterval和IHTMLWindow2.setTimeout也会抛出UnauthorizedAccess异常.这些方法未标记为已弃用:

http://msdn.microsoft.com/ko-kr/library/windows/desktop/aa741505%28v=vs.85%29.aspx

然而,他们受伤同样的减产同样受伤.

更新#4:我在这篇文章中给出了推荐的方法:

/sf/answers/1298280651/

为了动态调用IHTMLWindow2对象的"eval"方法(或任何其他方法).得到与上面相同的"System.UnauthorizedAccessException".所以也没有喜悦.

Microsoft建议使用"eval"而不是"execscript",但在上述实验之后,我怀疑他们只是在浏览器中引用"eval".

据我所知,到目前为止,当涉及到成熟的IE11 +使用"eval"进程外(通过COM)似乎已被完全禁止以及窗口对象的任何其他函数调用,唯一的例外是上面提到的.Navigate2()的反向通道.

javascript security watin denied

6
推荐指数
1
解决办法
2803
查看次数

标签 统计

c++ ×1

com ×1

denied ×1

internet-explorer ×1

javascript ×1

security ×1

watin ×1