2011-12-14 32 views
6

Tôi đang cố gắng lấy mã HTML từ một trang web không thuộc cùng một tên miền. Văn bản html được phân tích cú pháp & tóm tắt một công thức (tên công thức, thành phần chính, số bước) được tìm thấy trên trang đó mã HTML được lấy từ đó.Sử dụng JQuery để lấy HTML từ một trang web khác: Có thể? Hợp pháp?

Sau đó, người dùng có thể nhấp vào liên kết & truy cập trang web đó bên ngoài miền để xem công thức.

Tôi biết Chính sách cùng nguồn gốc, nhưng điều đó có áp dụng để nhận mã HTML từ trang web bên ngoài miền trong nước không? Tôi tưởng tượng nó chính xác giống như nhận XML, vì vậy đây là hợp pháp & được cho phép phải không?

Có cách nào để tôi có thể lấy văn bản/mã HTML từ miền ngoài miền nội địa của mình không?

Sử dụng Javascript & JQuery, ý tưởng là để giới hạn số lượng máy chủ yêu cầu & lưu trữ bằng cách người dùng thực hiện các yêu cầu đối với từng công thức & phân tích cú pháp HTML trên các mặt hàng. Điều này ngăn chặn tắc nghẽn phía máy chủ & cũng có nghĩa là tôi không phải đi qua máy chủ & xóa các bản tóm tắt công thức cũ đã lỗi thời.

Tôi mở cửa cho giải pháp/Gợi ý trong bất kỳ ngôn ngữ lập trình hoặc API hoặc vv

+0

[Yup] (http://stackoverflow.com/questions/8336129/extracting-the-content-of-an-element-from-an-external-page/8336276#8336276) – Purag

+0

@Purag phải tuân theo cùng một nguồn gốc chính sách giống như bất cứ điều gì khác. – ArtOfWarfare

Trả lời

8

Điều bạn đang cố gắng làm không thể thực hiện được bằng bất kỳ thư viện AJAX nào. Chính sách tên miền chéo của trình duyệt sẽ không cho phép bạn thực hiện việc này.

Nhưng bạn có thể làm điều này với sự kết hợp của php (hoặc bất kỳ ngôn ngữ phía máy chủ nào khác) và AJAX. Tạo một tập lệnh php như sau:

<?php 
    $url=$_POST['url']; 
    if($url!="") 
     echo file_get_contents($url); 
?> 

Giả sử tên tập lệnh là fetch.php. Bây giờ bạn có thể thực hiện cuộc gọi AJAX từ mã jQuery của bạn tới số fetch.php này và nó sẽ tìm nạp mã HTML cho bạn.

3

Không, điều này sẽ không làm việc từ client-side JavaScript. Trình duyệt ngăn chặn nó vì lý do bảo mật. Bạn sẽ cần phải thực hiện các cuộc gọi ajax đến một kịch bản lệnh phía máy chủ cục bộ (ví dụ PHP), sau đó sẽ tìm nạp nội dung (thông qua cURL, ví dụ) và trả về HTML mà bạn muốn.

+0

còn về anyorigin.com này. sẽ làm việc đó và có an toàn để khách hàng sử dụng (họ sẽ không nhận được vi-rút/phần mềm độc hại) không? –

+2

Có nhưng đó là API JSONP, đó không phải là câu hỏi của bạn :) – AlienWebguy

+0

Lý do cho việc giảm giá? – AlienWebguy

1

Cùng một nguồn gốc được áp dụng. thử mã này và bạn sẽ phải đối mặt với lỗi bảo mật

$.get("other web page site", {}, function(content){ 
    $("#receipe").html(content) 
}, "html") 

btw, bạn sẽ nhiều khả năng vi phạm luật bản quyền, vì vậy hãy cảnh giác ;-)

+1

Vâng .. nếu những gì OP decribes (làm cho một bản tóm tắt nội dung của trang web và cung cấp một liên kết đến nó) vi phạm luật bản quyền thì tất cả các công cụ tìm kiếm làm. –

+2

@ noah1989, vâng không bao giờ mặc dù vậy. Có thể những gì công cụ tìm kiếm làm là bất hợp pháp trong hiển thị sneak xem trước của trang và rằng chủ sở hữu nội dung của trang web nghĩ rằng nó phản tác dụng để kiện công cụ tìm kiếm mà làm cho trang web của họ "có thể khám phá". – OnesimusUnbound

0

Tôi đang không chắc chắn nếu nó đếm javascript như tinh khiết giải pháp nhưng: http://developer.yahoo.com/yql/ có thể giúp bạn với những gì bạn đang tìm kiếm.

2

Để thêm điều gì đó vào câu trả lời bạn đã nhận được, tôi có thể cho bạn biết rằng html không được sử dụng như một cách để truyền dữ liệu "như dịch vụ". Vì mục đích đó, có XML hoặc JSON hiển thị qua SOAP hoặc REST.

Trong kịch bản của bạn, cách tiếp cận tốt nhất mà tôi có thể nghĩ đến, là sử dụng iframe để hiển thị nội dung bên ngoài và trích dẫn nguồn nội dung iframe, bao gồm liên kết bên ngoài như bạn đã làm.

Bạn vẫn có thể thử cách tiếp cận phía máy chủ để tìm nạp html từ xa nhưng một lần nữa, không phải là cách sạch sẽ để làm điều đó, chắc chắn không phải là thực hành tốt và có thể không hợp pháp.

Nếu tác giả của nội dung muốn nội dung có thể sử dụng lại bên ngoài trang web, người đó có thể thể hiện ý định này bằng cách cung cấp nội dung chưa định dạng sẵn có thông qua dịch vụ hoặc nguồn cấp dữ liệu RSS/Atom.

Các vấn đề liên quan