如何禁止TWebBrowser控件在直接读入Html文件时访问网络???(100分)

  • 主题发起人 主题发起人 ark918
  • 开始时间 开始时间
A

ark918

Unregistered / Unconfirmed
GUEST, unregistred user!
我在使用TWebBrowser控件直接将一个txt格式或html格式的文件读入时,发现TWebBrowser总是自动连接网络读取文件中的图片等资源,使用脱机浏览也禁止不了。有什么方法可以禁止TWebBrowser访问网络吗?
 
好像问题出在这里,但我水平太低,请高手解释一下怎么具体实现……给分啦!!!
-----------------------------------
控制下载
  宿主可以在某些方面控制下载—帧、图形、Java等等—通过实现 IOleClientSite 和一个定义为 DISPID_AMBIENT_DLCONTROL 的周边属性。当 dispidMember 设置为DISPID_AMBIENT_DLCONTROL 调用宿主的 IDispatch::Invoke 方法时,它应该将pvarResult 设置为 0 或下列值的组合:

  DLCTL_BGSOUNDS 浏览器组件播放同文档相联的背景声音;

  DLCTL_DLIMAGES 浏览器组件从服务器下载图形;

  DLCTL_DOWNLOADONLY 浏览器组件下载页面但不显示;

  DLCTL_FORCEOFFLINE 浏览器组件工作在脱机方式。通过 URLMON 提出请求时, 即使计算机连接了互联网,也设置 BINDF_OFFLINEOPERATION 标志;

  DLCTL_NO_BEHAVIORS 浏览器组件不执行任何行为;

  DLCTL_NO_CLIENTPULL 浏览器组件不执行任何客户端的 pull 操作;

  DLCTL_NO_DLACTIVEXCTLS 浏览器组件不下载文档中的任何 ActiveX 控件;

  DLCTL_NO_FRAMEDOWNLOAD 浏览器组件对包含框架的页面进行语法分析但不下载任何帧, 同时忽略框架,不翻译任何 frame 标记;

  DLCTL_NO_JAVA 浏览器组件不执行任何 Java applet;

  DLCTL_NO_METACHARSET 浏览器组件隐藏文档中的 META 元素指示的字符集;

  DLCTL_NO_RUNACTIVEXCTLS 浏览器组件不执行文档中的任何 ActiveX 控件;

  DLCTL_NO_SCRIPTS 浏览器组件不执行任何脚本;

  DLCTL_OFFLINE 与 DLCTL_OFFLINEIFNOTCONNECTED 相同;

  DLCTL_OFFLINEIFNOTCONNECTED 如果未连接互联网,浏览器组件将以脱机方式工作。通过 URLMON 提出请求时,即使计算机连接了互联网,也设置 BINDF_GETFROMCACHE_IF_NET_FAIL 标志;

  DLCTL_PRAGMA_NO_CACHE 浏览器组件迫使请求发送给服务器并忽略代理,即使代理指明 数据是最新的也是如此。通过 URLMON 提出请求时,设置 BINDF_PRAGMA_NO_CACHE 标志;

  DLCTL_RESYNCHRONIZE 浏览器组件忽略缓存中的数据并向服务器请求更新。如果服务器指明 缓存中的数据是更新了的则使用缓存数据。通过 URLMON 提出 请求时,设置 BINDF_RESYNCHRONIZE 标志;

  DLCTL_SILENT 浏览器组件不显示用户界面。通过 URLMON 提出请求时,设置 BINDF_SILENTOPERATION 标志;

  DLCTL_URL_ENCODING_DISABLE_UTF8 浏览器组件禁止 UTF-8 编码;

  DLCTL_URL_ENCODING_ENABLE_UTF8 浏览器组件允许 UTF-8 编码;

  DLCTL_VIDEOS 浏览器组件播放文档中包含的视频片断。

安全管理
浏览器组件的宿主可以实现它们自己的安全管理并替代 WebBrowser 中已有的设置。通过实现 IInternetSecurityManager 接口完成这一功能。浏览器组件以SID_SInternetSecurityManager 参数调用宿主的 IServiceProvider::QueryService方法来获得这个接口。关于安全管理的更多内容,参见 About URL Security Zones。

 
设置MIME filter把text/html以外的都过滤了。
http://www.euromind.com/iedelphi/app.htm
 
如何设置啊?能不能直接提供代码呢?比如禁止JAVA
 
你自己不是发了资料了?
评比DLCTL_NO_JAVA标志就可以了。
例如
HRESULT CHostWindow::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags,
DISPPARAMS *pdispparams, VARIANT *pvarResult,
EXCEPINFO *pexcepinfo, UINT *puArgErr)
{
HRESULT hr = DISP_E_MEMBERNOTFOUND;

if (dispidMember == DISPID_AMBIENT_DLCONTROL)
{
pvarResult->vt = VT_I4;
pvarResult->lVal = DLCTL_NO_FRAMEDOWNLOAD | DLCTL_NO_SCRIPTS;
hr = S_OK;
}

return hr;
}

具体看这里
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/hosting/hosting.asp
 
谢谢啦!
 

Similar threads

D
回复
0
查看
781
DelphiTeacher的专栏
D
D
回复
0
查看
821
DelphiTeacher的专栏
D
后退
顶部