0

モノクルリーダーの使用を開始したばかりで、約 800 ページと 25 MB のファイルサイズになる前にダウンロードした PDF を使用しようとしましたが、問題はモノクルがこのエラーで返されることです。

TypeError: null のプロパティ 'onFirstPageOfBook' を読み取れません

リソースはドキュメントとして解釈されますが、MIME タイプ application/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 に変換する場合にも問題なく機能します。

PDF URL

4

1 に答える 1

1

PDF は monocle js で公式にサポートされていない可能性があります: 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 デバッガーを使用して monocle HTML ページを実行すると、失敗した PDF も正常に読み込まれます。

もう 1 つのポイントは、monocle js が埋め込みタグに PDF をロードしていることです。モノクル js とは別に読み込まれた同じ埋め込みタグ コードは問題なく読み込まれます。そして、機能するものは2ページをロードし、両方とも同じPDF URLのタグを埋め込みます。機能しないものは、実装された埋め込みタグを 1 つだけ取得しますが、すべてのモノクル ID が存在するわけではありません。

ファイルサイズに関係している可能性があります。555K では PDF を読み込めませんでしたが、412K 以下では問題なく読み込めました。

これは厄介なハックですが、これは他の方法ではロードしない PDF をロードします。

//Monocle.Events.listen(frame, 'load', onDocumentReady);
//Monocle.Events.listen(frame, 'load', onDocumentLoad);
frame.contentWindow.location.replace(url);
onDocumentReady();
onDocumentLoad();
于 2014-06-09T03:48:09.670 に答える