-1

変数 var doc に割り当てられた HTML Document オブジェクトがあります。このドキュメントオブジェクトを使用して、値がレンダリングおよび書き込まれるテキストファイルに文字列値をレンダリングしていますが、IE11 ブラウザーでは不適切な形式ですが、IE8、IE10、ff n chrome では正常に動作します。以下のコードを見つけてください:

  function savecontent(str){
  var filename = "data.txt";
  var str=replaceAll(str,'<doublequote>','"');
  var w = window.frames.w;
  if( !w )
     {
             w = document.createElement( 'iframe' );
             w.id = 'w';
             w.style.display = 'none';
             document.body.insertBefore( w,null );
             w = window.frames.w;
             if( !w )
             {
                     w = window.open( '', '_temp', 'width=100,height=100' );
                     if( !w )
                     {
                             window.alert( 'Sorry, could not create file.' ); return false;
                     }
             }
     }

  var doc = w.document;
  doc.open('text/plain');
  doc.charset="iso-8859-1";
  doc.write(str);
  doc.close(doc.write(str));
  w.close();
  if( doc.execCommand( 'SaveAs', false, filename ) )
     {
             window.alert("Please save the file.");
     }
}

私のstrは、employee_firstname、employee_lastname、employee_id、employee_salary、employee accountno、employee_dobなどのようなものになる可能性があります.

これは IE11 で次のようにレンダリングされます。

employee_firstname,employee_lastname,
employee_id,employee_salary,employee accountno,employee_dob

しかし、期待どおりであり、データは IE8,ff n chrome で次の形式でレンダリングされます。

employee_firstname,employee_lastname,employee_id,
employee_salary,employee accountno,employee_dob

IE8、FF n chrome などの他のブラウザーで気付いた違いは、他のブラウザーと比較して IE11 で発生する改行の違いです。IE11 ブラウザーまたは document.write() の代わりに、テキスト ファイルでデータのレンダリングを適切にフォーマットする方法を教えてください。

4

1 に答える 1

1

提供されたコードから問題を完全に再構築することはできませんが、問題の核心は、オブジェクトのopen()メソッドを使用して、インライン フレームに表示される新しいドキュメントを生成していることにあるようです。Documentこれは比較的よくサポートされていますが、作成されたドキュメントがプレーン テキスト ドキュメントではなく HTML ドキュメントである場合に限られます。

フォーマットを使用しようとするとtext/plain、ブラウザは異なる方法で処理します。実際に HTML ドキュメントを作成し、作成中のドキュメントの DOM ツリーに配置します。body記述したテキストまたはその周りの要素ラッパーのいずれかを含む部分が含まれpreているため、そのまま表示されます。たとえば、古いバージョンの IE ではpre要素が生成されますが、IE 11 では生成されません。IE 11 は正しいことをしていると主張するかもしれません: プレーン テキストであることは、行への分割に関してテキストをそのままレンダリングする必要があることを意味しません。

とにかく、これを回避する方法はpre、テキストをそのまま表示したい場合、HTML ドキュメントを生成し、コードにラッパーを挿入することです。

doc.open('text/html');
doc.write('<pre>' + str + '</pre>');
于 2015-01-22T09:36:50.930 に答える