通过meta段的设置可以控制浏览器的渲染行为,但在一些特殊情况下,meta段的设置无效,我们需要额外的操作以达到目的。

模式1:页面A(IE)iFrame引用页面B(Chrome Frame)

问题描述
在IE渲染的页面A中,使用iframe引用的页面B即使添加了meta信息也不会使用Chrome Frame渲染。
解决方法
CFInstance.js(见文档附件)同样是由Google提供的开源源代码,帮助我们更灵活的使用Chrome Frame。在页面A中引入CFInstance.js,页面加载完毕后调用new CFInstance()。其返回一个内部使用Chrome Frame渲染的Object对象。最后将该对象添加至A页面目标位置(删除原iframe,不再需要)。示例代码如下:

function onload() {
if (CFInstance && CFInstance.isAvailable()) { //判断CFInstance是否可用
var gcf = new CFInstance({
src : url, //页面B的url地址
className : “chrome-frame” //通过该className可以控制返回对象的css
});
document.body.appendChild(gcf); //添加至页面指定位置
}
else {
open(url, “_self”); //CFInstance不可用时执行的动作
}
};

问题描述模式2:页面A(Chrome Frame)iFrame引用页面B(IE)

在Chrome Frame渲染的页面A中,使用iframe引用的页面B(无论是否添加了meta段)也将使用Chrome Frame渲染。
解决方法
调整页面结构,增加框架页C(使用IE渲染)。将页面A、B分别使用new CFInstance和iframe方式引入并布局在框架页C中,页面结构如下:

模式3:页面A(Chrome Frame)Open页面B(IE)

问题描述
在Chrome Frame渲染的页面A中,调用window.open打开的页面B(无论是否添加了meta段)也将使用Chrome Frame渲染。
解决方法
调整页面结构,增加框架页C(使用IE渲染)。通过new CFInstance方式将页面A引入框架页C,在页面A中调用框架页C的open方法打开页面B。这时页面B将使用IE渲染。页面结构如下:

在页面A中调用框架页C的open方法时,不能简单的通过window.parent.open方式实现,需要借助CFInstance的rpc实现跨浏览器通讯。示例代码如下:

//框架页C代码示例
function onload() {
if (CFInstance && CFInstance.isAvailable()) {
var gcf = new CFInstance({
src : url,
className : “chrome-frame”
});
gcf.rpc.expose(“showIEDialog”, showIEDialog); //注册页面A中可调用的方法
document.body.appendChild(gcf);
} else {
open(url, “_self”);
}
};function showIEDialog(url, name, options) {
window.open(url, name, options);
}
//页面A代码示例
if (CFInstance && !dorado.Browser.msie) { //判断当前为非IE浏览器且CFInstance可用
if (CFInstance.rpc) { //判断当前页面是否通过new CFInstance方式打开
//调用框架页C中暴露的方法showIEDialog,第二个参数为传递的参数
CFInstance.rpc.callRemote(“showIEDialog”, [ url, name, options ]);
CFInstance.rpc.init();
} else { //当前页面非new CFInstance方式打开,例如直接使用Chrome浏览器打开了框架页C
alert(“目标地址需要IE浏览器”);
}
} else { //当前浏览器为IE且Chrome Frame不可用,页面A为IE渲染
open(url, name, options);
}

模式4:页面A(Chrome Frame)使用 ActiveX

问题描述
如何在Chrome Frame渲染的页面中使用ActiveX。
解决方法
不推荐在Chrome Frame渲染的页面中使用ActiveX,需要确保使用ActiveX控件的页面由IE渲染。
存疑的备选解决方法
ActiveX for Chrome是一款专门为Chrome浏览器开发的扩展程序,其目的是为了在Chrome浏览器中可以直接使用ActiveX控件。但该项目已经很长一段时间没有更新。在本次项目中,经过实际测试,其并不能很好的为所有ActiveX控件提供支持。因此,如果使用ActiveX for Chrome,一定要进行全功能覆盖测试。
项目地址:http://code.google.com/p/np-activex/

参考资料:http://wiki.bsdn.org/pages/viewpage.action?pageId=50070010

js下载:CFInstall.js    CFInstance.js

Google Chrome Frame 自定义渲染方式,调用ActiveX的更多相关文章

  1. IE内嵌google chrome frame解决浏览器兼容问题

    IE内嵌google chrome frame解决浏览器兼容问题  http://www.cnblogs.com/xwdreamer/archive/2013/12/17/3477776.html 参 ...

  2. 【转】IE内嵌google chrome frame解决浏览器兼容问题

    参考文献: http://www.pseudowired.com/2012/12/04/tomcat-http-header-manipulation/(html中自动添加使用chrome的heade ...

  3. IE 加速插件之 Google Chrome Frame

    前言 IE 8 及以下版本的速度较慢. 特别是前端的js 和 css 内容较多时尤为突出. 就笔者的开发经验来说GWT, Ext JS, raphael , draw2d 等开发的系统在IE下使用是相 ...

  4. Google chrome浏览器中通过扩展调用本地应用程序以及和程序相互通讯(C++)

    最近项目用到浏览插件的开发,IE用到的是BHO,chrome打算做成扩展. 但是和ie有一点不同,chrome扩展是基于html+js+css开发的,那么就会有二个问题 1. 代码和算法等容易被别人复 ...

  5. 使用 Google Chrome 数据抓包方式免费下载收费音乐

    对于每个有音乐细胞的 boys & girls 来说,听音乐的时候是不是会经常遇到如下图的问题. 自从音乐进入正版之后,很多歌曲只有付费用户才可以下载.虽然可以在线听,可是以我的倔脾气,就是喜 ...

  6. 告别IE给我们的web开发带来的困扰(使用chrome frame v8引擎)

    茶爸爸个人微信:benyzhous,公众号:cha-baba欢迎骚扰 由于客户所有机器必须使用IE6浏览器,导致我们在开发项目过程中遇到非常多的样式与性能问题,在偶然的一次使用360软件管家搜索chr ...

  7. 【转】使用Chrome Frame,彻底解决浏览器兼容问题

    本文转自http://www.ryanbay.com/?p=269,感谢该作者的总结 X-UA-Compatible是自从IE8新加的一个设置,对于IE8以下的浏览器是不识别的. 通过在meta中设置 ...

  8. Skyline TerraExplorer Pro(等ActiveX控件)在Google Chrome浏览器的运行方法

    首先感谢ActiveX for Chrome 网银助手(np-activex)这个项目(https://code.google.com/p/np-activex/),解决了我们困惑很久的问题——在Ch ...

  9. Google Chrome 自定义协议(PROTOCOL)问题的处理

    最近在使用谷歌浏览器的时候遇到了自定义协议(PROTOCOL)的问题,比较折腾,特此记录,希望我浪费生命换来的结果能够帮助读到此文的朋友少浪费一点宝贵的时间! 由于某些原因,电脑里一直没有安装阿里旺旺 ...

随机推荐

  1. Oracle数据库建表+添加数据练习

    SQL脚本: --建表 --student表+注释 create table student( sno ) not null, sname ) not null, ssex ) not null, s ...

  2. javaweb学习总结(六)——Servlet开发(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

  3. Leetcode-121 Best Time to Buy and Sell Stock

    #121   Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price ...

  4. 关于启明星系统(OA系统,预定系统,请假系统等)安全性的说明

    启明星系统推荐是安装在内网里,因此,系统采用了较为简单的身份验证. 事实上,在访问页面时,系统会判断当前cookie的uid是否大于0,如果是,则表示用户已经登录,否则表示未登录. public st ...

  5. ASP怎么解除文件上传200kb限制

    第一步:修改IIS设置,允许直接编辑配置数据库.打开,Internet信息服务第二步:先在服务里关闭iis admin service服务,找到windows\system32\inetsrv\下的m ...

  6. 滑动返回类库SwipeBackLayout的使用问题,解决返回黑屏,和看到桌面

    SwipeBackLayout是一个很好的类库,它可以让Android实现类似iOS系统的右滑返回效果,但是很多用户在使用官方提供的Demo会发现,可能出现黑屏或者返回只是看到桌面背景而没有看到上一个 ...

  7. 奇怪吸引子---Sakarya

    奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...

  8. Gulan查询UI排布

    遇到一个问题,如何在相对布局里把两个item放在同一行,而且高度一样呢? <RelativeLayout xmlns:android="http://schemas.android.c ...

  9. H-Basis/SG/SH GI Relighting

    小试了一把预计算全局光照,作为PRT的上级应用.完全自行实现,使用SG/SH.H-Basis基波对GI光场进行频域压缩,存在3D纹理中,用于2跳间接光照实时显示.其中坑点不少,尤其是在HDR环境下使用 ...

  10. 解决genemotion模拟器冲突导致的Android Studio无法启动ADB的问题

    首先命令行下运行 adb nodaemon server ./adb nodaemon server (Mac OSX) 如果出现错误: error: could not install *smart ...