0

javascriptを使用してhtmlコンテンツを解析する方法はありますか?

他のサイトから自分のサイトに div のみを表示する必要があります。それは可能ですか?たとえば、自分のサイトで のみを表示したいとしdiv#leftcolumnますw3schools.com。これは可能ですか?

javascriptまたはjQueryを使用して同じことを行うにはどうすればよいですか?

ありがとう。

4

5 に答える 5

3

Same Origin Policyを確認する必要があります。

コンピューティングでは、同一生成元ポリシーは、JavaScript などの多くのブラウザー側プログラミング言語にとって重要なセキュリティ概念です。このポリシーは、同じサイトからのページで実行されているスクリプトが、特定の制限なしに互いのメソッドとプロパティにアクセスすることを許可しますが、異なるサイトのページにまたがるほとんどのメソッドとプロパティへのアクセスを防ぎます。

データを取得するには、次の条件が必要です。

同じプロトコルとホスト

これを回避するには、 JSONPを実装する必要があります。


同じプロトコルとホスト上ですが、jQuery にはload()次のように使用する機能があります。

$('#foo').load('somepage.html div#leftcolumn', function(){
  // loaded
}); 

別の可能な解決策(テストされていません)は、サーバー側の言語を使用することであり、jsonp. これは PHP を使用した例です。

1) という名前の php ページを作成し、ajax.php次のコードを挿入します。

<?php
  $content = file_get_contents("http://w3schools.com");
  echo $content ? $content : '0'; 
?>

2) 一部のページに、次のコードを挿入します。

$('#yourDiv').load('ajax.php div#leftcolumn', function(data){
    if (data !== '0') { /* loaded */ }
}); 

次のことを確認してください。

  • ajax.phpファイルへの正しいパスを指定します
  • allow_url_fopenphp.ini からオンにしました。
  • yourDiv受信したコンテンツを入れidたい要素の置換
于 2012-07-04T18:27:24.350 に答える
2

で HTML コンテンツを取得する必要がありますHTTPRequest。次に、ページに表示したい HTML のコンテンツをスクレイピングできます。これにはある種のサーバー側言語を知る必要があります。残念ながら、ブラウザーのセキュリティ制限により、Ajax/jQuery はこれに対して機能しません。ほとんどの「Ajax」リクエストは、同じオリジン ポリシーの対象となります。要求は、別のドメイン、サブドメイン、またはプロトコルからデータを正常に取得できません。

于 2012-07-04T18:26:09.167 に答える
0

コードを取り込むには、Webサービスを作成する必要があります。これは、セキュリティ上の制限により、JavaScriptを介してデータを取り込むことができないためです。これは同一生成元ポリシーと呼ばれ、このページの他の場所にリンクされています。

HtmlAgilityPackasp.netテクノロジを使用している場合は、サーバー側で解析するために使用できます。

次に、次を使用してjQueryからデータを呼び出すことができます.load()

あなたがそれを次のような隠されたdivにロードするという考えです:

$("#result").load("/webservice/pulldata.ashx");

通常のjquery要素と同じようにクエリします。

于 2012-07-04T18:32:22.240 に答える
0

XSS保護をバイパスしたい場合は、独自のサーバーリクエストを作成し、そこから情報を取得できます。例(php):

getContent.php

<? $fileContent = file_get_content("http://w3schools.com");
   echo $fileContent; ?>

次に、このコンテンツを変更したいものを何でも使用できます(エコーの前でも)。

サンプルクライアントスクリプト:

<div id="resultHtml"></div>
<script type="text/javascript">
$(document).ready(function(){
    $("#resultHtml").load("getFilecontent.php");
});
于 2012-07-04T18:33:52.647 に答える
0

私が考えることができるもの:

<div style="hidden" id="container"></div>

そして、次のようにします(ショートカット @ https://stackoverflow.com/a/11333936/57508

var $container = $('#container');
$container.load('someurl-on-your-domain');
var $leftcolumn = $('div#leftcolumn', $container);
$leftcolumn.appendTo($sthother);

コメントによると:はい、そうです、同じオリジンポリシーがあります(http://api.jquery.com/load/):

ブラウザーのセキュリティ制限により、ほとんどの "Ajax" 要求は同一オリジン ポリシーの対象となります。要求は、別のドメイン、サブドメイン、またはプロトコルからデータを正常に取得できません。

では、ドメイン内にあるプロキシを作成してから、プロキシの出力を使用してみませんか?! ねえ、それは長ったらしいです-本当です...しかし、それは機能します:)

于 2012-07-04T18:26:16.113 に答える