javascriptを使用してhtmlコンテンツを解析する方法はありますか?
他のサイトから自分のサイトに div のみを表示する必要があります。それは可能ですか?たとえば、自分のサイトで のみを表示したいとしdiv#leftcolumn
ますw3schools.com
。これは可能ですか?
javascriptまたはjQueryを使用して同じことを行うにはどうすればよいですか?
ありがとう。
javascriptを使用してhtmlコンテンツを解析する方法はありますか?
他のサイトから自分のサイトに div のみを表示する必要があります。それは可能ですか?たとえば、自分のサイトで のみを表示したいとしdiv#leftcolumn
ますw3schools.com
。これは可能ですか?
javascriptまたはjQueryを使用して同じことを行うにはどうすればよいですか?
ありがとう。
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_fopen
php.ini からオンにしました。yourDiv
受信したコンテンツを入れid
たい要素の置換で HTML コンテンツを取得する必要がありますHTTPRequest
。次に、ページに表示したい HTML のコンテンツをスクレイピングできます。これにはある種のサーバー側言語を知る必要があります。残念ながら、ブラウザーのセキュリティ制限により、Ajax/jQuery はこれに対して機能しません。ほとんどの「Ajax」リクエストは、同じオリジン ポリシーの対象となります。要求は、別のドメイン、サブドメイン、またはプロトコルからデータを正常に取得できません。
コードを取り込むには、Webサービスを作成する必要があります。これは、セキュリティ上の制限により、JavaScriptを介してデータを取り込むことができないためです。これは同一生成元ポリシーと呼ばれ、このページの他の場所にリンクされています。
HtmlAgilityPack
asp.netテクノロジを使用している場合は、サーバー側で解析するために使用できます。
次に、次を使用してjQueryからデータを呼び出すことができます.load()
。
あなたがそれを次のような隠されたdivにロードするという考えです:
$("#result").load("/webservice/pulldata.ashx");
通常のjquery要素と同じようにクエリします。
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");
});
私が考えることができるもの:
<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" 要求は同一オリジン ポリシーの対象となります。要求は、別のドメイン、サブドメイン、またはプロトコルからデータを正常に取得できません。
では、ドメイン内にあるプロキシを作成してから、プロキシの出力を使用してみませんか?! ねえ、それは長ったらしいです-本当です...しかし、それは機能します:)