3

だから - テキストエリアと動的に作成された IFrame を含むページがあり、adobe acrobat プラグインを使用して PDF を表示します。

最初は、テキストエリアがフォーカスされています。

テキストエリアをフォーカスしたいのですが、PDF が読み込まれると IFrame がフォーカスを奪います。

Firefox では、テキストエリアをフォーカスされた要素としてリセットするのは簡単です。

これを行うには、iframe の "load" イベントをリッスンしてから、テキスト ボックスで .focus() を呼び出します。

M$ IE は、動的に作成された Iframe の onload イベントを発生させないため、IFrame の readyState プロパティを使用して、いつ準備ができたかを判断します。

var ieIframeReadyHandler = function() { 
    if( iframe.readyState=="complete" ) {
           textarea.focus();
    } else {
        setTimeout(ieIframeReadyHandler, 100);
    }
}


setTimeout(ieIframeReadyHandler, 100);

注: readyState=="complete" ケースでは発生しないように見えるため、iframe の readystatechanged イベントをリッスンしません!!

では、このコードが実行されるとどうなるでしょうか? ... まあ、何もありません。Iframe pdf はまだフォーカスされていますが、document.activeElement を使用してどの要素にフォーカスがあるかを確認すると (以前は IE のみでしたが、現在は firefox 3 でサポートされています)、テキストエリアにフォーカスがあることが通知されます!!

なんてこったい??!?

何か案は?

4

3 に答える 3

1

iframe.attachEvent("onload", function(){ })iframe onloadIEでイベントを行う方法です。

于 2011-05-27T01:03:00.897 に答える
0

Internet Explorer では、iframe の readystate プロパティは、iframe の外部ではなく、iframe 内でのみ更新されます。なんらかの理由で、それは設計によるものです。iframe の外部から、iframe のコンテンツが読み込まれたかどうかを判断する信頼できる方法はありません。

ページの読み込み時に iframe をすぐに表示することが重要でない場合は、ユーザーが (リンクまたはボタンを介して) 要求するまで読み込みを待つことができます。そうすれば、彼らはそれを期待しています。

PDF がローカルでホストされている場合 (またはキャッシュを実行してもかまわない場合) の別の方法は、Flash と、SWFTools の PDF2SWF などのツールを使用し、バックエンドで変換を行うことです。

于 2009-04-29T06:49:24.670 に答える