Tôi đang phát triển tiện ích mở rộng Firefox đầu tiên của mình và cho rằng tôi cần lấy mã nguồn hoàn chỉnh của trang hiện tại. Làm thế nào tôi có thể làm điều đó với XUL?Tiện ích mở rộng của Firefox & XUL: lấy mã nguồn trang
Trả lời
thực sự trông giống như không có cách nào để có được "tất cả các mã nguồn". Bạn có thể sử dụng
document.documentElement.innerHTML
để lấy bên trongHTML của phần tử trên cùng (thường là html). Nếu bạn có một thông báo lỗi php như
<h3>fatal error</h3>
segfault
<html>
<head>
<title>bla</title>
<script type="text/javascript">
alert(document.documentElement.innerHTML);
</script>
</head>
<body>
</body>
</html>
innerHTML sẽ
<head>
<title>bla</title></head><body><h3>fatal error</h3>
segfault
<script type="text/javascript">
alert(document.documentElement.innerHTML);
</script></body>
nhưng thông báo lỗi vẫn sẽ giữ lại
chỉnh sửa: documentElement được mô tả ở đây: https://developer.mozilla.org/en/DOM/document.documentElement
Có lẽ bạn có thể nhận được nó thông qua DOM, sử dụng
nguồn var = document.getElementsByTagName ("html");
và lấy nguồn sử dụng DOMParser
getElementsByTagName (lưu ý: các yếu tố) –
Bạn có thể nhận URL với var URL = document.location.href
và điều hướng đến "view-source:"+URL
.
Bây giờ bạn có thể lấy mã nguồn hoàn toàn (viewsource là id của cơ thể):
var code = document.getElementById('viewsource').innerHTML;
Vấn đề là mã nguồn được định dạng. Vì vậy, bạn phải chạy strip_tags() và htmlspecialchars_decode() để khắc phục.
Ví dụ, dòng 1 nên là loại tài liệu và dòng 2 sẽ giống như thế:
<<span class="start-tag">HTML</span>>
Vì vậy, sau strip_tags() nó trở thành:
<HTML>
Và sau htmlspecialchars_decode(), chúng tôi cuối cùng đã có được kết quả mong đợi:
<HTML>
Mã không chuyển sang trình phân tích cú pháp DOM để y Bạn cũng có thể xem HTML không hợp lệ.
Hmmm ... có vẻ khá hay. Toàn bộ mã được bao bọc trong một phần tử có ID 'viewsource' hay tại sao bạn làm theo cách đó? Và những gì bạn có nghĩa là "định dạng"? Các thực thể có được thoát không? – Franz
Hãy coi nó như một mã HTML bình thường. Id nội dung là nguồn lượt xem. Tôi đã thêm ví dụ như thế nào nó trông. Tôi hy vọng rằng bạn có một số ý tưởng làm thế nào để đi trang này (bạn có thể làm điều đó với iframe ẩn, ví dụ). – Sagi
Hoặc bạn chỉ có thể sử dụng '.textContent' để thay thế. –
Bạn sẽ cần đối tượng xul browser để tải nội dung vào.
Tải phiên bản "xem nguồn:" của trang của bạn vào đối tượng trình duyệt, theo cách tương tự như trình đơn "Xem nguồn trang". Xem hàm viewSource() trong chrome://global/content/viewSource.js
. Chức năng đó có thể tải từ bộ nhớ cache, hay không.
Một khi nội dung được tải, nguồn gốc được cho bởi:
var source = browser.contentDocument.getElementById('viewsource').textContent;
Serialize một DOM Document
Phương pháp này sẽ không nhận được nguồn gốc, nhưng có thể có ích cho một số độc giả.
Bạn có thể tuần tự hóa đối tượng tài liệu thành một chuỗi. Xem Serializing DOM trees to strings trong MDC. Bạn có thể cần sử dụng phương thức khởi tạo thay thế trong tiện ích mở rộng của mình.
Bài viết đó nói về các tài liệu XML, nhưng nó cũng hoạt động trên bất kỳ tài liệu DOMDocument HTML nào.
var serializer = new XMLSerializer();
var source = serializer.serializeToString(document);
Điều này thậm chí hoạt động trong trang web hoặc bảng điều khiển firebug.
Điều này cũng khá hoàn chỉnh. Điều gì xảy ra nếu XHTML bị hỏng do một số lỗi, mặc dù? – Franz
Trình phân tích cú pháp DOM sẽ đã bị xử lý với HTML bị hỏng, vì vậy bộ phân tích sẽ không thấy nguồn bị hỏng. –
Điều đó có thể sẽ là xấu sau đó? Biến 'document' có thuộc tính' textContent' không? – Franz
Phần đầu tiên của câu trả lời của Sagi, nhưng thay vào đó hãy sử dụng document.getElementById('viewsource').textContent
.
Phù hợp hơn với câu trả lời của Lachlan, nhưng có một cuộc thảo luận về nội bộ ở đây nhận được khá sâu, đi vào mã Cpp.
http://www.mail-archive.com/[email protected]/msg05391.html
và sau đó làm theo các câu trả lời ở dưới cùng.
- 1. Tiện ích mở rộng của Firefox với jquery 1.3+
- 2. XMLHttpRequest trong Tiện ích mở rộng của Firefox
- 3. appendChild trong một tiện ích bổ sung Firefox XUL
- 4. Chuyển đổi Tiện ích mở rộng của Google Chrome sang tiện ích mở rộng của Firefox hoặc Safari
- 5. Tạo một tiện ích Firefox mới: XUL hoặc Jetpack?
- 6. Mã hóa tiện ích mở rộng của Chrome?
- 7. Tiện ích mở rộng của Chrome - Hình ảnh của tiện ích mở rộng trên Trang cài đặt
- 8. Tiện ích mở rộng của Chrome + Dart
- 9. Plugin/Tiện ích mở rộng Firefox cần thiết?
- 10. Nhận URL trang hiện tại từ tiện ích mở rộng thanh bên firefox
- 11. Tiện ích mở rộng của Firefox để đóng cửa sổ firefox
- 12. bảo mật mã trong tiện ích mở rộng google chrome
- 13. Giao tiếp giữa tiện ích mở rộng firefox và trang javascript
- 14. Tiêm tệp CSS vào trang web qua tiện ích mở rộng firefox
- 15. Mở URL trong tab/cửa sổ hiện tại từ Tiện ích mở rộng của Firefox
- 16. Sự khác nhau giữa tiện ích mở rộng Firefox và tiện ích bổ sung Firefox là gì?
- 17. Tiện ích mở rộng PSake?
- 18. Trang nền trong tiện ích mở rộng bật lên- chrome
- 19. Tiện ích mở rộng của Chrome: biểu tượng tiện ích mở rộng onclick, mở popup.html trong tab mới
- 20. Hủy yêu cầu HTTP GET từ Tiện ích mở rộng của Firefox
- 21. Cách xác định thư mục của tiện ích mở rộng
- 22. cách gọi hàm trong tiện ích mở rộng của Firefox từ nút html
- 23. là tiện ích mở rộng của google chrome, nguồn mở hay không?
- 24. Tiện ích mở rộng của Google Chrome - Truy cập DOM
- 25. Đặt tiêu đề HTTP từ tiện ích mở rộng của Firefox
- 26. vị trí của các tiện ích mở rộng của Firefox trong Mac OS?
- 27. Tiện ích mở rộng của Firefox: gBrowser không được xác định
- 28. Làm mẫu Mustache.js trong tiện ích mở rộng của Chrome
- 29. Truy cập cookie cụ thể theo tên miền/tên trong tiện ích mở rộng của Firefox
- 30. Lấy HTML nguồn của trang hiện tại từ tiện ích chrome
Đây có thể là những gì tôi đang tìm kiếm. Tuy nhiên, tôi không hiểu mã ví dụ bạn đã đăng. Khối thứ hai có phải là văn bản được in qua 'cảnh báo' trong khối đầu tiên không? Nếu vậy, tại sao thông báo lỗi đột nhiên xuất hiện bên trong thẻ 'body'? – Franz
yep, khối mã thứ hai là mã đang được cảnh báo. Đó có thể là sự điều chỉnh mã của firefox. Chỉ cần sao chép khối đầu tiên vào một tệp html trống và thử: --) –
Đây không phải là nguồn hoàn chỉnh. Như bạn đã lưu ý, mọi thứ không nằm trong khoảng ' 'và'' sẽ không được đưa vào. Câu trả lời của Lachlan có vẻ là một giải pháp tốt hơn nhiều. – MatrixFrog