網站搜尋

javascript - 如何在新標籤頁中將字串作為 HTML 內容打開?


public openNewTab(blob: Blob | string) {
   const data = 'data:text/plain;charset=utf-8,' + encodeURIComponent(blob);
   window.open(data, '_blank');
   setTimeout(() => window.URL.revokeObjectURL(data), 100);
}

我正在嘗試將 blob 文件(在這個例子中它是一個字串)以 HTML 內容的形式在新分頁中打開。這個函數可以正常工作,但它打開的是純文字內容,標籤只是像「<html><head><title>....」這樣作為文字顯示。我想要顯示 HTML 內容。我試過將資料定義為 text/html,但這沒有用。我該怎麼在不使用任何函式庫的情況下做到這一點?我也嘗試過像這樣使用錨點標籤;

   const anchorElement = document.createElement('a');
   document.body.appendChild(anchorElement);
   anchorElement.setAttribute('href', data);
   anchorElement.setAttribute('target', '_blank');
   anchorElement.click();

它與 window.open() 的結果相同。

答案#1

你告訴瀏覽器內容是 text/plain——這就是為什麼它只被作為文本處理。將其改為 text/html,它應該就能正常工作。

作為替代,您可以使用 window.document.write() 設置已開啟視窗的內容。

document.querySelector("#someButton").onclick = function() {
  let child = window.open("about:blank","myChild");
  child.document.write(`<html>
    <head><title>Hi mum!</title></head>
    <body><p>Hello World</p></body>
   </html>`);
  child.document.close();
}

可用的小提琴。

答案#2

你可以使用視窗文件的 write 函數來達成它,如下所示:

public openNewTab(blob: Blob | string) {
   const data = 'data:text/plain;charset=utf-8,' + encodeURIComponent(blob);
   var myWindow = window.open("", '_blank');
   myWindow.document.write(data);
   setTimeout(() => window.URL.revokeObjectURL(data), 100);
}

您可以在 https://www.w3schools.com/jsref/met_win_open.asp 找到更多細節。