0

これが可能かどうかはわかりませんが... one.html からウィンドウをポップアップして (たとえば、somesite.com/index.html に)、すべての HTML を one.html の非表示フィールドに保存できますか?

ありがとう!

4

2 に答える 2

3

「ポップアップ」を介してこれを行うと、ブラウザにはクロスドメインに対するルールがあるため、あらゆる種類の例外が発生します。彼らは、反対側のドキュメントにアクセスしようとする JavaScript のようなものを防ごうとします。

HTML をページの要素にロードする方法を探している場合は、AJAX を使用することをお勧めします。ブラウザーの組み込み ajax を使用するには、XMLHttpRequest オブジェクトを使用できます。そのための手順は、最初にオブジェクトを作成し、次に何をどのようにフェッチするかを伝え、次にそれをフェッチし、データを読み取ります。

次に例を示します。

// Create the object
var xhr = new XMLHttpRequest();
// Open page
xhr.open( 'GET', '/index.html', true );
// Register your events
xhr.onsuccess = function() {
    // awesome, it loaded!
    destination.innerHTML = xhr.responseText;
};
xhr.onerror = function(e) {
   // the page denied my request because: e
};
// send any data if you want, or just execute the request
xhr.send( myData || null );

宛先は次のようになります。

// jQuery version:
var destination = $( 'textarea#content-holder' );
// Equivalent to:
var destination = (function(tag, id) {
    var elms = document.getElementsByTagName(tag);
    for ( i = 0; i < elms.length; i++ ) {
        if ( elms[i].id === id ) return elms[i];
    }
    return undefined;
})('textarea', 'content-holder');

一方、ajax をサポートするすばらしいライブラリは jQuery で、http://jquery.com/で入手できます。私が ajax をお勧めする主な理由は、さまざまなタイプの ajax リクエストに対応するいくつかの異なるハックとパッチがあることです。それは本当にきちんとしていて、それによって多くの苦痛を避けることができます。

試していたものをロードするには、コードは次のようになります。

$( destination ).load( '/index.html', function() {
    // do stuff after it's been loaded
);

jQuery でできるもう 1 つの非常に優れた機能は、'index.html' からページの特定の部分をロードすることです。これは、標準クエリを介して行われます。たとえば、「load-me」クラスを持つ要素からのみマークアップをロードしたいとします。これを行う必要があります。

$( destination ).load( '/index.html .load-me', function() {
    // after load stuff
);

クロスドメインの制限を完全に回避する 1 つの方法は cURL を使用することですが、これには PHP が必要になります。簡単な例を次に示します。

/ajax.php に次のように記述します。

<?php
    if ( ! $_POST['ajax'] ) die();

    // this doesn't consider errors
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $_POST['url']);

    curl_exec($ch);
    curl_close($ch);
?>

JavaScript で次のように記述します。

var xhr = new XMLHttpRequest();
// Open the script
xhr.open( 'POST', '/ajax.php', true);
// Register your events
xhr.onsuccess = function() {
    // awesome, it loaded!
    destination.innerHTML = xhr.responseText;
};
xhr.onerror = function(e) {
   // the page denied my request because: e
};
xhr.send( { 'ajax':'true', 'url':'http://somesite.com/index.html' } );

またはjQueryで:

$( destination ).load( '/ajax.php', {ajax:true,url:'http://somesite.com/indexhtml'}, function() {
    // awesome, it loaded!
} );

考慮すべきこと: - AJAX を使用すると、依然としてクロスドメイン リクエストを作成できません。方法はありますが、完璧な方法はありません。(XMLHttpRequest では、ハックを自分で見つけて作成する必要があります。

  • jQuery がないと、ロードされたデータを解析するのが難しくなります。たとえば、特定の要素を取得しようとしている場合は、RegExp のスキルが優れていることを願っています。

  • ブラウザが異なれば、ajax の実装も異なります。IE では、コンストラクターは ActiveXObject.Create('XMLHttpRequest') です。注: これはすべて jQuery の一部です。

あなたが物事を理解することを願っています!XD

于 2012-11-22T00:13:24.437 に答える
0

ポップアップが同じドメインにある場合、ポップアップ ウィンドウに次のコードを記述できます。

opener.document.getElementById('hidden').value = "the value you want";
于 2012-11-21T23:35:58.730 に答える