我刚开始使用单片眼镜阅读器并尝试使用pdf我下载之前它有大约800页和25mb文件大小,现在的问题是单片机返回错误
TypeError:无法读取属性' onFirstPageOfBook'为null
资源被解释为文档但以MIME类型传输 应用/ PDF
如果我使用1页pdf,它可以正常工作。
这是我的代码:
<script type="text/javascript">
var bookData = {
getComponents: function () {
return [
'coolresume.pdf',
'content1.html'
];
},
getContents: function () {
return [
{title: "Chapter 1", src: 'coolresume.pdf'},
{title: "Chapter 2", src: 'content1.html'}
]
},
getComponent: function (componentId) {
return {url:componentId};
},
getMetaData: function(key) {
return {
title: "Test document",
creator: "Aron Woost"
}[key];
}
}
Monocle.Events.listen(
window,
'load',
function () {
window.reader = Monocle.Reader('reader', bookData);
}
);
</script>
这是我得到的PDF样本,当相同的PDF转换为EPUB时也适用
答案 0 :(得分:1)
单片机js可能无法正式支持PDF:https://groups.google.com/forum/#!searchin/monocle-js/pdf/monocle-js/0ue1t243JLg/hgOPIQaramQJ
然而,有些PDF有效,有些则无效。我跟踪那些没有单片机js源代码,3555,3556,3557行:
Monocle.Events.listen(frame, 'load', onDocumentReady);
Monocle.Events.listen(frame, 'load', onDocumentLoad);
frame.contentWindow.location.replace(url);
...使用PDF作为源,url
值发送到frame.contentWindow.location.replace
函数,但是对于某些PDF,load
事件未触发,因此之前附加的函数不执行,脚本停止显示空白页,但其他PDF加载正常。
此外,当我通过theseus调试器运行单片眼镜HTML页面时,失败的PDF也会加载正常。
另一点,单片机js正在将PDF加载到embed标签中。加载独立于单片机js的相同嵌入标签代码加载得很好。那些工作加载2页,都嵌入了相同的PDF网址标签。那些不起作用的只能实现一个embed标签,但不是所有的单片机id都在那里。
可能与文件大小有关。我无法以555K加载PDF,但是412K和更低的加载精细。
这是一个讨厌的黑客攻击,但这会加载PDF,否则不会:
//Monocle.Events.listen(frame, 'load', onDocumentReady);
//Monocle.Events.listen(frame, 'load', onDocumentLoad);
frame.contentWindow.location.replace(url);
onDocumentReady();
onDocumentLoad();