Google Chrome Frame 自定義渲染方式,調用ActiveX

經過meta段的設置能夠控制瀏覽器的渲染行爲,但在一些特殊狀況下,meta段的設置無效,咱們須要額外的操做以達到目的。css

模式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,再也不須要)。示例代碼以下:chrome

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渲染。頁面結構以下:app

在頁面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.jsgoogle

相關文章
相關標籤/搜索