【问题标题】:How to debug scripted ePub3 in iBooks?如何在 iBooks 中调试脚本 ePub3?
【发布时间】:2012-08-13 14:48:34
【问题描述】:

我有一本涉及脚本的 ePub3 书籍,它与 Readium 配合得很好,但仅部分用于 iBooks。我的猜测是 JavaScript 有时会出错(尽管作为标准的网络应用程序,完全相同的代码在 Safari 中运行良好)。关于如何调试这个有什么想法吗?

【问题讨论】:

  • 更新:这个问题原来不是脚本问题,而是由于 iBooks 在 CSS 意义上处理溢出的方式存在一些明显差异而丢失了内容——它似乎在某些情况下甚至隐藏溢出当 CSS 表明它不应该时。
  • 好问题。 IBooks 确实允许 WebSockets,所以也许可以在它之上构建一个解决方案来提供调试..
  • 好主意。我最初的解决方案是一个真正简单的“控制台”,它允许您输入和评估 JS 表达式。
  • AlexanderN:您是否设法从 iBooks 与 WebSockets 建立外部连接?我做不到
  • iBooks 不允许 JS 建立任何类型的外部网络连接,因此 WebSockets 根本无法工作。

标签: javascript debugging cross-platform ibooks epub3


【解决方案1】:

您可以在终端应用程序中使用此行在 iBooks 中启用 Webkit Web Inspector 以更改其设置:

defaults write com.apple.iBooksX WebKitDeveloperExtras -bool YES

重新启动 iBooks 后,您会在上下文菜单(更多 > 显示检查器)中找到检查器。所有检查器工具都可用,包括控制台等。

【讨论】:

    【解决方案2】:

    Azardi Online 可用于使用浏览器读取文件。可以从那里使用内置或附加控制台进行调试。或者可以创建控制台 shim:

    if(!console) {
      console = {
        "_log" : [],
        "log" : function() {
          var arr = [];
          for ( var i = 0; i < arguments.length; i++ ) {
            arr.push( arguments[ i ] );
          }
          this._log.push( arr.join( ", ") );
        },
        "trace" : function() {
          var stack;
          try {
            throw new Error();
          } catch( ex ) {
            stack = ex.stack;
          }
          console.log( "console.trace()\n" + stack.split( "\n" ).slice( 2 ).join( "  \n" ) );
        },
        "dir" : function( obj ) {
          console.log( "Content of " + obj );
          for ( var key in obj ) {
            var value = typeof obj[ key ] === "function" ? "function" : obj[ key ];
            console.log( " -\"" + key + "\" -> \"" + value + "\"" );
          }
        },
        "show" : function() {
          alert( this._log.join( "\n" ) );
          this._log = [];
        }
      };
    
      window.onerror = function( msg, url, line ) {
        console.log("ERROR: \"" + msg + "\" at \"" + "\", line " + line);
      }
    
      window.addEventListener( "touchstart", function( e ) {
        if( e.touches.length === 3 ) {
          console.show();
        }
      } );
    }
    

    参考文献

    【讨论】:

    • 是的,或者我可以在 Readium 中运行它,但 Readium 不是 iBooks,Azardi 也不是,不幸的是,它是一个很好的产品。但是在 iPad 上的浏览​​器中运行它并支持其简约的控制台是一个有用的想法,谢谢,接受这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2019-01-20
    • 2014-09-23
    • 2010-09-15
    • 2015-07-23
    • 2021-04-05
    • 2017-08-24
    相关资源
    最近更新 更多