1

私はPrinceXMLを使用して、いくつかのMathJaxマークアップを含む HTML の PDF を作成しています。数学を適切にレンダリングするには、PDF に変換する前に、数学レンダリングを処理する JavaScript をページで実行する必要があります。

PrinceXML で JavaScript を有効にして MathJax ライブラリを読み込もうとすると、初期化コードで「TypeError: null 値はオブジェクトではありません」というメッセージが表示されます。これを追跡すると、次のことがエラーの原因であることがわかります。

var scripts = (document.documentElement || document).getElementsByTagName("script");
var namePattern = new RegExp("(^|/)"+BASENAME+"\\.js(\\?.*)?$");
for (var i = scripts.length-1; i >= 0; i--) {
if (scripts[i].src.match(namePattern)) { // <--- Error thrown here
  STARTUP.script = scripts[i].innerHTML;
  if (RegExp.$2) {
    <etc...>

エラーは、src 属性のない script 要素でスローされます (MathJax は script 要素を使用して LaTeX コードを格納します)。PrinceXML は、不足している src 属性にアクセスするときに null を返すことで、不足している src 属性を処理しているように見えます。したがって、nullの場合scripts[i].src.match(namePattern)はエラーがスローされsrcます。ただし、Firefox (fiddle: http://jsfiddle.net/9ZHMR/を参照) で行うと、 element.src は src 属性が欠落している場合に空の文字列を返すため、ブラウザーで作業しているときにこの問題は発生しませんでした。

スクリプト要素の src 属性を null にするか、属性が存在しない場合は空の文字列にするかのどちらが「正しい」動作ですか? これは実際の生活と標準のケースですか?

編集主に、この動作がどこかの標準で指定されているかどうかに関心があるため、バグレポートをFirefoxまたはPrinceXMLに投稿するか、標準がない場合はMathJaxにバグレポートを投稿してこのケースを処理するかを知っています.

4

3 に答える 3

1

http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting-1.html#the-script-elementの仕様によると:

 attribute DOMString src;

これはnull許容の文字列の戻り値ではないため、.srcからnullを返すことは仕様で許可されていません。

于 2012-09-28T04:34:23.920 に答える
1

これは、 HtmlScriptElementの特定の実装によって異なります。特定の実装で src 属性が空の文字列として事前定義されている場合 (FireFox の場合と同様)、src は空の文字列として返されます。最初に null として定義されている場合、src は null として返されます。

于 2012-09-27T08:30:25.363 に答える
1

使用する前に src をチェックするこのマイナーな修正により、おそらくエラーを回避できます。

if (scripts[i].src && scripts[i].src.match(namePattern)) {
    ...

それともロングハンド...

if (scripts[i].src) {
    if (scripts[i].src.match(namePattern)) {
        ...

scripts[i].src が null の場合、「falsey」と評価されます。

于 2012-09-27T08:33:03.123 に答える