1

我目前正在为 EPUB 文件开发交互式 HTML5 小部件。我们通常使用 jQuery 来做这些事情。

如果我可以在 EPUB 清单中包含一个 XML 数据文件,然后让我的 HTML5 小部件使用标准 jQuery 和 AJAX 方法从 XML 文件中读取数据,那么当前的项目会容易得多。

我已经为 Web 应用程序做了一千次,只是在 EPUB 文件中很难做到这一点。

我的主要问题是:

1)这甚至可能吗?

2) 在 package.opf 中声明数据 XML 文件时使用的正确媒体类型是什么?

我正在使用以下代码:

$.ajax({
    type: "GET",
    async: false,
    cache: false,
    url: "data/test.xml",
    dataType: "xml",
    error: function() {
        alert("ERROR: The table data could not be read...");
    },
    success: function(objFileContents) {
        alert("SUCCESS");
    }
);

当我在 iBooks 中测试时,错误警报一直显示。但是,当我在桌面上的 Safari 中进行测试时,一切正常。

非常感谢任何帮助。

谢谢!

4

1 回答 1

1

当 jQuery 的主要目的之一是跨浏览器兼容性时,人们不得不想知道在 EPUB 中使用像 jQuery 这样的大型库有什么意义。我强烈推荐使用标准的 ECMA5/XHTML5 技术。

无论如何,您当然可以在 EPUB 中包含一个 XML 文件并阅读它。你有什么困难?显而易见的是检查路径。例如,您确定不应该这样../data/text.xml吗?对于媒体类型,在其他条件相同的情况下,只需使用text/xmlor application/xml

请注意,即使读取成功,某些读取器也可能出于未知原因返回值 0。这可能会诱使 jQuery 报告错误。但是您应该能够访问底层 XMLHttpRequest 对象的 responseText 或 responseXml 字段。

我使用以下代码,它工作得很好:

read=(function(){
    var r=new XMLHttpRequest();
    return function(src){
        r.open('GET', src, false);
        r.send();
        if(r.status!=200 && r.status!=0){//E-books return 0 for some reason?
            //REPORT ERROR
            return null;
        }
        return r.responseText;
    };
}())
;
于 2013-01-05T11:14:02.073 回答