コピー時にユーザーの選択にテキストを追加する Tynt.com が提供するサービスを複製しようとしています。ユーザーがこれを特に好まないことは理解していますが、ユーザーが Web サイトから何かをコピーするたびに、URL と著作権表示を追加するのはクライアントの要求です。
現在のブラウザーでは、DOM 要素を作成し、選択したテキストを追加し、著作権テキストを追加してから、新しいノードを選択することでこれを行うことができます。
var newSelection = document.createElement( 'div' );
newSelection.style.cssText = "height: 1px; width: 1px; overflow: hidden;";
if( window.getSelection )
{
var selection = window.getSelection( );
if( selection.getRangeAt )
{
var range = selection.getRangeAt( 0 );
newSelection.appendChild( range.cloneContents( ) );
appendCopyright( );
document.body.appendChild( newSelection );
selection.selectAllChildren( newSelection );
// ... remove element, return selection
}
}
IE9 では、これはselection.selectAllChildren( newSelection )
ステートメントでエラーにnewSelection
なり、上記の 2 行目に適用されたスタイルにより、ビューポートから効果的に「隠されている」ことが原因であることがわかりました。
コメントアウトは機能しますが、明らかに新しいノードがエンドユーザーに表示されます。これは後のバージョンの IE で解決されたようですが、サポートが必要なブラウザーである IE9 で十分な回避策を見つけるのに苦労しています。
を設定したり、画面外に配置したり、代替の選択機能を試したりするなど、さまざまな代替手段を試しましたvisibility: hidden;
が、それぞれ異なる問題が発生します。
IE によってスローされるエラーは次のとおりです。SCRIPT16389: Unspecified error.