![](/img/trans.png)
[英]Chrome extension: load external page in iframe and read innerHTML
[英]Chrome extension read innerHTML of the current page?
嗨,這可能是一個愚蠢的問題,但我無法在任何地方找到答案。 我正在編寫一個 chrome 擴展,我只需要讀取當前頁面的 html 以便從中提取一些數據。
這是我到目前為止所擁有的:
<script>
window.addEventListener("load", windowLoaded, false);
function windowLoaded() {
alert(document.innerHTML)
});
}
</script>
誰能告訴我我做錯了什么? 謝謝,
function windowLoaded() {
alert('<html>' + document.documentElement.innerHTML + '</html>');
}
addEventListener("load", windowLoaded, false);
注意windowLoaded
是在使用之前創建的,而不是之后創建的,這將不起作用。
另請注意我如何獲取document.documentElement
的 innerHTML,即html
標記,然后在其周圍添加html
源標記。
我正在編寫一個 chrome 擴展,我只需要讀取當前頁面的 html 以便從中提取一些數據。
我認為這里的一個重要答案不是用於警告innerHTML
的正確代碼,而是如何從已經呈現的內容中獲取所需的數據。
正如pimvdb指出的那樣,由於拼寫錯誤並且需要document.documentElement.innerHTML
,您的代碼無法正常工作,您可以在 Chrome 控制台 (Ctrl+Shift+I) 中進行診斷。 但這對於您首先想要內部 HTML 的原因是次要的。 無論您是在尋找某個節點、特定文本、存在多少<div>
元素、ID 的值等等,我都強烈推薦使用像jQuery這樣的庫(vanilla JS 可以工作,但它可以冗長而笨拙)。 您可能不想讀入所有 HTML 並使用字符串函數或正則表達式對其進行解析,您可能希望利用您已經可用的所有 DOM 解析功能。
換句話說,是這樣的:
$("#some_id").val(); // jQuery
document.getElementById("some_id").value; // vanilla JS
可能比像這樣易碎的東西更安全、更容易、更易讀(這里可能有點偏離,但只是為了說明一點):
innerHTML.match(/<[^>]+id="some_id"[^>]+value="(.*?)"[^>]*?>/i)[1];
window.addEventListener("load", windowLoaded, false);
function windowLoaded() {
alert(document.documentElement.innerHTML);
}
你有一個沒有目的的}
和});
應該只是}
。 這些是語法錯誤。
此外,它是document.documentElement.innerHTML
,因為它不是document
的屬性。
使用document.documentElement.outerHTML
。 (請注意,Firefox 不支持此功能;與您的情況無關。)但是,這仍然不完美,因為它不會返回根元素之外的節點( !doctype
以及可能的一些注釋或處理指令)。 document.innerHTML
屬性是 AFAIK,在 HTML5 規范中指定,但目前不受任何瀏覽器支持。
僅供參考,導航到view-source:www.example.com
也會顯示整個標記(Chrome 和 Firefox)。 但我不知道你是否可以以某種方式使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.