4.内嵌 IE 方案
4.1 纯 ppapi 的局限
硕正组件的功能中,有二个功能在 ppapi 插件环境下是无法实现:4.2 何为内嵌 IE
如果您的 B/S 应用必须要使用上述的这二个功能, 您可以选择使用另一个方案:内嵌 IE 内核.
4.3 实现细节
硕正官网的在线演示是双工的, “纯 ppapi” 模式 和 “内嵌 IE” 模式都支持, 在顶部备有下拉选择, 可以随时切换运行模式.
#65#function navCur()
{
..//略
#75# var url = 't' + (cur+1) + '.htm?125'; //所谓 “内部页面” 的 URL
if($B.ppapi) {
if(document.getElementById('ppapiMode').value == "ie") url = 'ppapi-ie.htm?' + url; //下拉选择 纯ppapi模式 或 内嵌IE模式
}
window.parent.document.getElementById('ContentPage').src = url; //打开演示页
}
上面第 76、77 行是关键, 如果当前浏览器是 IE 或 npapi, 就不需要 “外部页面” 了,直接打开最终的 “内部页面” ; 否则就根据 <select> 下拉的选择, 如果您是选择了内嵌 IE, 则打开 “外部页面” , 并把 “内部页面” 的 URL 传递给它, 让它去处理.
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=GB2312">
<script language="JavaScript">
//该句相当于是 jquery 的 $(document).ready
document.addEventListener("DOMContentLoaded", addListener, false);
//为 pp 对象添加侦听
function addListener() {
pp.addEventListener('message', handleMessage, false);
}
//ppapi对象的事件侦听
function handleMessage(message)
{
if(message.data.name == "OnReady")
{
//URL拼装,比如把 "http://localhost/ppapi.htm?report1.htm" 转换成为 "http://localhost/report1.htm"
var search = window.location.search;
var url = window.location.href;
url = url.substr(0, url.length - search.length);
var n = url.lastIndexOf('/');
if(n > 0) url = url.substr(0, n + 1);
url += search.substr(1);
//main: 插件的IE内核打开页面
pp.postMessage( {func: 'Goto', para: url } );
}
}
</script>
</head>
<body leftMargin="0" topMargin="0" rightMargin="0" bottomMargin="0" scroll=no style="overflow:hidden">
<object id="pp" type="application/x-ppapi-supcan" Core="IE" isSilent="false" width="100%" height="100%">
插件加载失败, 原因可能为:<br>
1.硕正 ppapi 插件未正确安装;<br>
2.当前 Chrome 不支持 ppapi, 请用高版本的 Chrome 浏览器
</object>
</body>
</html>
页面不复杂, 有几处需要说明一下.