0

私は数時間問題に取り組んできました。私の目標を達成するための助け、または私がやろうとしていることが実際には不可能であることを確認していただければ幸いです。

document.getSelection()任意の Web ページから、選択したテキスト () を入力として受け取る webapp があります。ブックマークレットを使用してこのようなスクリプトをかなり簡単に実行することは可能ですが、iframe でこれを実行できれば、エンド ユーザーにとって最善の方法です。

親フレームは、このスクリプトを使用した私のサイトです。

$('#frame').load(function(){
    // this event won't be triggered
    $(window).mouseup(function(){
        doStuff(window.getSelection()); 
    });

    // this will throw a security error
    $(window.frames[0].document).mouseup(function(){
        doStuff(window.frames[0].document.getSelection()); 
    });                  
});

子フレームには任意のサイトがあります。子ドキュメントが私のドメインのものでない限り、XSS セキュリティ上の理由からアクセスは禁止されています。srcサードパーティの URL を引数として iframe をドメインに設定し、サードパーティの URL にリダイレクトするなど、いくつかのバリエーションとハッキングを試みました。ある意味では、うまくいかなくてよかったです(もしうまくいったとしても、XSSセキュリティにはまだ長い道のりがあるからです...)

別のオプションは、サードパーティのページをダウンロードして、プロキシサーバーのように私のドメインから提供することですが、ファイルへの相対パスに関する多くの問題に既に遭遇しました。 (スクリプト経由でファイルにアクセスする場合など)。

私は運が悪いだけかもしれないという結論に達しました。.getSelection()おそらく、私の場合の重要な違いは、子のメソッドにのみアクセスしたいということです。Cookie やキーストロークにアクセスしたり、DOM と対話したりする必要はありません。多分それは違いを生まないかもしれませんが、多分そうです。

4

3 に答える 3

0

プロキシ メソッドを試すことはできますが、元のドメインを指すベースタグを挿入します。その後、パスを処理する必要があります。

XSS ハックが見つかったとしても、私はそれに頼りません。修正される可能性が高く、クロスブラウザではない可能性が高いです。

于 2009-03-13T07:38:31.077 に答える
0

XHR からのテキストを使用して iframe のドキュメントを作成するか、jQuery のload()関数を使用することが 1 つの可能性ですが、これは iframe にナビゲーションがない場合にのみ機能します。

于 2009-03-13T07:42:33.423 に答える
0

私はあなたの答えを完全には読んでいませんでした:-)しかし、おそらく私には解決策があります。それには、親フレームと子フレームの間で双方向にデータを渡すことが含まれます。

子から親のハッシュ (ハッシュはhttp://url#HASH_PART ) を書き込むことができます (読み取ることはできません)。したがって、親 iframe では、間隔を設定して値を確認するだけです。たとえば、50 ミリ秒ごとです。

function checkHash() {
    if (window.location.hash == "#something") {
        // my child frame set this value using: 
        //parent.window.location.hash = "something";
        doSomething();
    }
}

詳細、および親から子への通信については、これを説明する完全な記事 (デモ リンクもあります) をここで見つけることができます。

于 2011-01-18T16:11:36.240 に答える