0

クロスドメイン リクエスト用の iframe を使用して hta アプリケーションを作成しました。これは、独自のサーバーを起動してプロキシすることができないためです。

メイン ページに jQuery スクリプトと「被害者」サイトの iframe を挿入しました。たとえば、google.com です。

<iframe name="iframe" src="http://google.com" application="yes"></iframe>

ここで、そのiframeを介してAJAX POSTリクエストを実行する必要があります。コードは次のとおりです。

var frame = document.frames.iframe;
frame.$ = $
frame.$.ajax({
    type : 'post'
    url : 'http://google.com'
    data : 'blablabla'
});

しかし、iframe で「No Transport」エラーが発生します。しかし、被害者のページでスクリプト要素を実行しているときは、すべて問題ありません。たとえば、次のようになります。

var frame = document.frames.iframe.document;
var el = frame.createEelement('SCRIPT');
el.src = "file://urlToJs.js";
frame.appendChild(el);

そして、この例ではすべて正常に動作しますが、私は仕事でインターネットを使用していません (私たちはローカル サイトで作業しています)...そして、ロードする別の js ファイルを作成したくありません。

助けてください!

私が試したこと:

  • スクリプト要素のテキスト (document.scripts[0].innerHTML) を取得し、iframe 内のテキストを含むスクリプトを作成します [エラー]
  • document.frames.iframes.$ = parent.$ [同じく動作しません、トランスポート エラーがありません]

jQuery ajaxは常にメインページを使用してリクエストを作成しているようですが、どうすれば修正できますか?

4

1 に答える 1

0

jquery は、スクリプトの読み込み時に必要なものをすべて収集します。

jqueryソースファイルで次のようなものを見ることができます:

(function factory( window ){ // a huge closure around the entire file
    var doc = window.document;

    window.$ = function(){
        // do something with the "doc"
    }
})( window );  // <- init with current window

したがって、変数 $ をどこに割り当てても、「ドキュメント」は変更されません。

jqueryはパフォーマンスの問題のためにこれを行います(おそらく他の何か?

jqueryソースを編集し、「ファクトリー」関数を抽出する必要があります...

( function factory(){} )() ==extract==> function factory(){}

iframeのウィンドウで呼び出します

factory(iframe.contentWindow);

その後、必要に応じて iframe.contentWindow.$ を使用できます。

于 2014-04-05T17:07:52.293 に答える