【草稿】chrome添加IE策略的具体技术细节
主要需要添加
【
IERenderViewHost
IERenderWidgetHostWin
】
来替换掉对应的
【
RenderViewHost
RenderWidgetHostWin
】
其中需要处理的细节地方非常之多
cookie共享
查找窗口
打印预览
鼠标手势
保存页面
下载接管
页面的放大和缩小
原则:
SOP,通源地址使用同一个渲染器来完成绘制。
渲染器切换场景
在一个TAB页内打开另外一个页面
拖拽打开一个页面
一个TAB页面打开另外一个TAB页
工作步骤
1:先对一种渲染器的切换进行改造
2:修改无尽的细节
3:完善其它几种渲染器切换过程。
////////////////////////////////////////////////////////////////////////////
简单类图
//////////////////////////////////////////////////////////////////////////////
一个在new tab页面打开一个新页面的例子:
经过一下几个过程的调用
NavigationController::LoadURL
NavigationController::LoadEntry
NavigationController::NavigateToPendingEntry
TabContents::NavigateToPendingEntry
RenderViewHostManager::Navigate
在TabContents::NavigateToPendingEntry函数中修改相关函数
/////////////////////////////////////////////////////////////////////////
需要添加以下一些属性:
当前使用的渲染器标示 curr_render_type_;
当前penging页面所使用的渲染器标示 penging_render_type_;
IERenderViewHost* ie_render_view_host_;
IERenderWidgetHostWin* ie_render_host_win_;
这几个属性分别放在那几个类里面是一个问题。
NavigationController 需要内核标识吗?
RenderViewHostManager 这个对象肯定需要。
TabContents 需要吗?
一个本地数据库记录相关URL的信息。
每次打开一个URL时要做实时判断。
【
IERenderViewHost
IERenderWidgetHostWin
】
来替换掉对应的
【
RenderViewHost
RenderWidgetHostWin
】
其中需要处理的细节地方非常之多
cookie共享
查找窗口
打印预览
鼠标手势
保存页面
下载接管
页面的放大和缩小
原则:
SOP,通源地址使用同一个渲染器来完成绘制。
渲染器切换场景
在一个TAB页内打开另外一个页面
拖拽打开一个页面
一个TAB页面打开另外一个TAB页
工作步骤
1:先对一种渲染器的切换进行改造
2:修改无尽的细节
3:完善其它几种渲染器切换过程。
////////////////////////////////////////////////////////////////////////////
简单类图
![]() |
tabcontents NavigationController RenderViewHostManager 的关系 |
![]() |
添加IE窗口策略的示意图 |
//////////////////////////////////////////////////////////////////////////////
一个在new tab页面打开一个新页面的例子:
经过一下几个过程的调用
NavigationController::LoadURL
NavigationController::LoadEntry
NavigationController::NavigateToPendingEntry
TabContents::NavigateToPendingEntry
RenderViewHostManager::Navigate
在TabContents::NavigateToPendingEntry函数中修改相关函数
/////////////////////////////////////////////////////////////////////////
需要添加以下一些属性:
当前使用的渲染器标示 curr_render_type_;
当前penging页面所使用的渲染器标示 penging_render_type_;
IERenderViewHost* ie_render_view_host_;
IERenderWidgetHostWin* ie_render_host_win_;
这几个属性分别放在那几个类里面是一个问题。
NavigationController 需要内核标识吗?
RenderViewHostManager 这个对象肯定需要。
TabContents 需要吗?
一个本地数据库记录相关URL的信息。
每次打开一个URL时要做实时判断。