再问妖哥,关于CppWebBrower的问题

wenyongjie 2015-09-19 10:21:06
妖哥 ,
我用哪天您我的例子,http://bbs.csdn.net/topics/391831184
不知为什么运行不了这个js的脚本,很很冒昧的把这个js登录脚本发到您的邮箱里(绝对没有毒,仅是个登录页面)
比如说,我用户名,和密码都不输入 ,直接打开网页能显示 “用户名和密码均不得为空!”,但 在程序里 用CppWebBrower打开就不执行,公司里的同事说,是不是这个控件 默认不执行js代码,要打开,但我不知怎么打开啊?烦请帮忙,谢谢啊
...全文
191 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenyongjie 2015-09-22
  • 打赏
  • 举报
回复
昨天发现问题所在,应该是CppWebBrower问题,在ie11上是能正确运行的,但在ie8(包括)下就不行,想来CppWebBrower是基于ie内核,目前 没有更好的解决办法,谢谢妖哥的无私帮助。过几天结贴。
WYJBCB 2015-09-20
  • 打赏
  • 举报
回复
没想到csdn禁止一个用户连回复三次贴 ,用另一个小号继续,跟了妖哥的 CrnDocHostUIHandler.h,发现ppvObject 居然为空,不知什么都没有执行 STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject) { *ppvObject = NULL; if (IsEqualIID(riid, IID_IUnknown)) *ppvObject = static_cast <IUnknown *> (this); else if (IsEqualIID(riid, IID_IDocHostUIHandler)) *ppvObject = static_cast <IDocHostUIHandler *> (this); else if(IsEqualIID(riid,IID_IDispatch)) *ppvObject = (IDispatch*)this; else if(IsEqualIID(riid,__uuidof(IDocHostUIHandler))) *ppvObject=(IDocHostUIHandler*)this;
wenyongjie 2015-09-20
  • 打赏
  • 举报
回复
再次研究了妖哥哪天给我的代码 ,发现一个关键地方 // 63 63 72 75 6E 2E 63 6F 6D if (!wcscmp(rgszNames[0], L"CrnShowMsgBox")) { *rgDispId = 165332; // *rgDispId = 102; //我改成这样子,响应不了,说明和id有关,但不知这个id值是怎么来的? }
wenyongjie 2015-09-20
  • 打赏
  • 举报
回复
再次研究了妖哥哪天给我的代码 ,发现一个关键的地方
wenyongjie 2015-09-20
  • 打赏
  • 举报
回复
现在我确定不是代码问题,应该是系统安全相关的,为了这事,我装了虚拟机,然后在虚拟机里运行,是正常的。谢谢妖哥啊
wenyongjie 2015-09-20
  • 打赏
  • 举报
回复
妖哥,在不在啊?
ccrun.com 2015-09-20
  • 打赏
  • 举报
回复
我需要一点时间来研究一下。
wenyongjie 2015-09-20
  • 打赏
  • 举报
回复
我怀疑是web控件的一些安全限制引起的,但查不出所以然啊,IE也添加了可安全的站点
wenyongjie 2015-09-20
  • 打赏
  • 举报
回复
要怎么设置啊?
ccrun.com 2015-09-20
  • 打赏
  • 举报
回复
引用 10 楼 wenyongjie 的回复:
OnDownloadComplete事件 处理,就会一直死在这里, while (cwb->Busy) Application->ProcessMessages();
这个和你的IE的安全设置也有一定关联。
wenyongjie 2015-09-20
  • 打赏
  • 举报
回复
OnDownloadComplete事件 处理,就会一直死在这里, while (cwb->Busy) Application->ProcessMessages();
WYJBCB 2015-09-20
  • 打赏
  • 举报
回复
还有,这个脚本,iso和androd都用它,目前只有pc没有调通,好烦啊
WYJBCB 2015-09-20
  • 打赏
  • 举报
回复
另外,我在网上找到这个http://blog.csdn.net/yyan/article/details/4814866 最后这一句 SetExternalUIHandler(pHost); SetExternalUIHandler这是什么函数呢?我怎么找不到它的声明啊?
WYJBCB 2015-09-20
  • 打赏
  • 举报
回复
我又跟踪了一下程序 ,发现 进不了这里,不知要进这里要解发什么条件 呢?你前几天的哪个html就可以进来 STDMETHODIMP GetExternal(
ccrun.com 2015-09-20
  • 打赏
  • 举报
回复
我看了看你发来的HTML页面,在我的测试环境里用CppWebBrowser打开这个页面就无响应了。可能要考虑一下脚本的兼容性。
另外,由于页面中有脚本的问题,特别是异步的脚本,那么需要另外选择一个合适时间来获取ICustomDoc接口了。不适合在Navigate以后等待WebBrowser了,可以考虑在WebBrowser的OnDownloadComplete事件中处理。
ccrun.com 2015-09-20
  • 打赏
  • 举报
回复
引用 3 楼 wenyongjie 的回复:
再次研究了妖哥哪天给我的代码 ,发现一个关键地方 // 63 63 72 75 6E 2E 63 6F 6D if (!wcscmp(rgszNames[0], L"CrnShowMsgBox")) { *rgDispId = 165332; // *rgDispId = 102; //我改成这样子,响应不了,说明和id有关,但不知这个id值是怎么来的? }
我来了,GetIDsOfNames中的DispId,要和Invoke中的dispIdMember相匹配。 这个值可以自定义,不同的方法的ID不要重复即可。

13,821

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧