2013-06-25 29 views
3

所以,我已經在我的錯誤(當然,至少第一個)縮小到這樣的功能:iBooks的JavaScript環境 - 無效的元素名稱

var genArray = function() { 
    var arr, len, i; 
    if(arguments.length > 0) { 
     len = [].slice.call(arguments, 0, 1)[0]; 
     arr = new Array(len); 
     for(i = 0; i < len; i++) { 
      arr[i] = genArray.apply(null, [].slice.call(arguments, 1)); 
     } 
    } else { 
     return null; //or whatever you want to initialize values to. 
    } 
    return arr; 
} 

然後,我得到一個非常無益的錯誤:

error on line 71 at column 23: StartTag: invalid element name 
Below is a rendering of the page up to the first error 

現在,第71行的函數肯定是而不是(也許它在編譯的ePub中,但我不知道它們是如何關聯的)。此外,我不知道這個錯誤在JavaScript上下文中意味着什麼。此外,這段代碼在瀏覽器(包括Safari)中工作正常。

任何想法可能會造成什麼問題?

編輯:一時興起,我查[]是否通過其更改爲Array()問題。沒有運氣。

回答

4

好了,我發現了一個解決我的問題。我只是需要圍繞我在CDATA標籤的JavaScript像這樣:

//<![CDATA[ 
var genArray = function() { 
    var arr, len, i; 
    if(arguments.length > 0) { 
     len = [].slice.call(arguments, 0, 1)[0]; 
     arr = new Array(len); 
     for(i = 0; i < len; i++) { 
      arr[i] = genArray.apply(null, [].slice.call(arguments, 1)); 
     } 
    } else { 
     return null; //or whatever you want to initialize values to. 
    } 
    return arr; 
} 
//]]> 

我使用epubcheck工具,它說的是這個文件必須形成正確的字符或什麼效果發現這一點。我不記得確切的消息。無論如何,這讓我想起了我在腳本中遇到的一個問題,我使用了一些unicode字符。我想起了解決它的CDATA。然後我發現this計算器問題,基本上說,這是必要的,當你的頁面必須被解釋爲XML/XHTML爲好,這是ePub文件的情況下進行。

所以,這個故事的寓意是在CDATA標籤爲ePub文件或iBooks的將Javascript。

編輯:應該指出,這是值得的這樣做你的JavaScript的所有。在我的情況下,問題是<小於運營商被解釋爲標籤的開始。但是,將CDATA標籤包含在所有JavaScript中,而不是嘗試隔離問題的來源可能更清晰。

編輯2:爲了將信息彙總到誰發現這個答案有用,誰應該也注意到,在外部文件中擁有所有的JavaScript也可能有效(根據問題的答案已鏈接到)。我現在不在意測試它,但它應該可以工作,因爲外部JavaScript不會被解析爲XML,就像它在<script>標記中一樣。

+1

把你的JS放在外部文件中不僅「可能也有效」,強烈推薦。 – 2013-06-27 06:43:15

+1

+1。大聲笑我保證我這樣做正常的網頁開發。 :)我只是想在沒有處理清單的情況下快速驗證概念,而我正在學習如何構建ePub。 – Logan

0

對我聽起來更像是一個XHTML錯誤。如果您沒有將其作爲XHTML文件打開,那麼當您在瀏覽器中運行時,請執行此操作並查看是否中斷。瀏覽器往往比EPUB閱讀器更寬鬆。你最有可能產生某種與切片無效的HTML元素,這將是巨大的,有完整的頁面,以確定到底是什麼「的getArray()」將返回...

+0

'genArray'返回一個具有參數維度的數組。即'genArray(64,64)'返回一個64x64的數組。因此,這個函數實際上並不返回'元素'。我同意這聽起來更像是一個XHTML錯誤,但是取消這個函數聲明(即使它沒有被調用)修復了這個錯誤。不幸的是,我需要這個功能。 – Logan

0

您報告中的錯誤指出XHTML文件來源出錯。我想看一下這個XHTML文件的第71列第23行。什麼東西在那裏?難道可能是<StartTag>?以某種方式編程式生成XHTML? EPUB不是「編譯」的;它們只是壓縮,而這一行/列信息是指EPUB中XHTML文件中的實際位置。 epubcheck說什麼?

這種錯誤消息將而不是由任何通過腳本創建的動態HTML中的問題生成;那些將導致DOMError

我的猜測是,iBooks的是在分析時的功能,完成之前的XHTML解析和可報告XHTML錯誤終止分析過程中發現了一些錯誤。但是,我無法想象錯誤可能是什麼;我懷疑它是函數結尾的缺失分號,但可能取決於下一行的內容。

完全個小問題,但

len = [].slice.call(arguments, 0, 1)[0]; 

相同

len = arguments[0]; 
+0

沒錯。我稍後閱讀ePub格式,並發現他們是拉鍊。它只是(出於某種奇怪的原因)我從來沒有想過重新打開文件,看看它指的是什麼。 但是,這不是很有幫助。 'for(i = 0; i Logan

相關問題