2

私が作成した種類のiframedwysiwygエディターを備えたアプリケーションがあります。iframeコンテンツは同じドメインから外れるため、XSSの問題ではありませんが、スタイルシートとコンテンツをサンドボックス化するために、物事を整理する必要があります。

とにかく、私が遭遇している問題は、iframeに追加したい特定のホットキーがあることです。たとえば、「削除」を押すとオブジェクトが削除されます。control + zを押すと、最新のアクションが取り消されます。かなり基本的なもの。すべてのアクションを設定し、iframeが読み込まれる最初のx時間は大幅に節約できます。キーボードショートカットをクリックしてすぐに使用できる場合があります。また、ショートカットが表示される前に、5〜10秒間クリックするか、何かを編集する必要がある場合もあります。彼らが働き始めると、彼らは素晴らしい働きをしますが、私たちは彼らが毎回バットから離れて働く必要があります。これが実行されるスクリプトは、iframedコンテンツにロードされます。スクリプトは検証に合格し、他のすべての方法で機能します。

基本的に、DOMがどのドキュメントからキーバインドキューを取得する必要があるかが混乱しているという問題があることがわかりましたが、一貫して機能するソリューションはありません。

これが私がこれまでに試したことです:

  • セレクターを$(document)から$(parent.document)に変更する:これは逆の効果がありました-開始するとうまく機能し、その後機能を停止しました。

  • documentとparent.documentの両方をセレクターとして使用する:同じ不安定な動作

  • $(document)ではなく$(window)へのバインド:同じ不安定な動作

  • 遅延後に呼び出される関数へのキーバインディングの移動:ここでは運がありません

  • 関数を呼び出してクリックをトリガーするか、iframe本体にフォーカスして、jqueryをキックスタートするかどうかを確認します。ここでも運がありません。

  • バインディング関数(現在は.keydown()に設定されています)で遊んでください-運がなくて.on('keydown'、.keypressなどに切り替えられました

これはすべてのブラウザで発生しているようですが、ChromeとFFの最新バージョンでは確かに見られます。

必要に応じて、コードの基本的な例をいくつか投稿できますが、コードは正常に機能します。間違ったものにバインドしているか、これをキャッチしている可能性のある他の何かが欠けていると思います。何かご意見は?ありがとう。

4

1 に答える 1

1

解決策を見つけました。各ブラウザは、正しく動作させるために少し異なるものが必要でした。問題は完全にiframeドキュメントがDOMのトップではないということでしたが、iframeに焦点を合わせるとすぐに、問題は解決しました。これが私が各ブラウザに対してしたことです:

  • クロム:

    $(parent.document).find( "#iframe")。focus();

  • Firefox:documentElementにフォーカスを追加し、トリガーセレクターを$(document)からに変更します

      $(document.documentElement).keydown()。focus()

  • IE:

    $('body')。focus();

それが他の誰かを助けることを願っています。

于 2012-07-06T17:41:24.660 に答える