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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM