zoukankan      html  css  js  c++  java
  • Google Chrome Frame 自定义渲染方式,调用ActiveX

    通过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

  • 相关阅读:
    springMVC controller输出前台提示信息
    使用ionic3开始自己的App开发之路
    async await
    mongodb安装和启动
    express框架的安装和使用
    js继承的实现方式
    node版本管理
    git提交时冲突问题解决
    css推荐
    js工具推荐
  • 原文地址:https://www.cnblogs.com/onlywujun/p/5742817.html
Copyright © 2011-2022 走看看