簡體   English   中英

如何在Safari App Extension中加載本地HTML文件

[英]How do I load a local HTML file in a Safari App Extension

我正在寫一個Safari App Extension。 在我的擴展程序文件夾中,我有一個HTML文件,我想使用Javascript讀取並附加到網頁上。 我不知道如何讀取文件。 我願意使用Javascript或Swift代碼來做到這一點。 任何幫助,將不勝感激,謝謝!

您可以讀取帶有XMLHttpRequest的文本或HTML文件,如下所示:

var oReq = new XMLHttpRequest();
oReq.addEventListener('load', function () {
  // file contents will be in `this.responseText`;
  console.log(this.responseText);
});
oReq.open('GET', 'myfile.html');
oReq.send();

請注意,此示例中的URL是相對的。 如果在全局頁面上使用此代碼,它將相對於全局頁面。 如果在注入的腳本中使用它,則它將與您將腳本注入到的網頁相對,這不是您想要的。 在這種情況下,您需要使用以擴展程序的基本URL開頭的絕對URL。 要獲取基本URL,請使用safari.extension.baseURI 這是上述示例的第六行,但使用的是絕對網址:

oReq.open('GET', safari.extension.baseURI + 'myfile.html');

使用XMLHttpRequest的一種更具技巧性的替代方法是將HTML文件加載到擴展程序全局頁面內的iframe中,然后從全局頁面上的腳本“讀取” iframed頁面的document.body.innerHTML

最后,我終於弄清楚了如何在Swift代碼中執行此操作。 我只和Swift合作了幾天,所以這個示例可能不太好,但希望對您有所幫助:

// The file path below is relative to the root of the extension directory.
let filename: NSString = "folder/file.html" as NSString
let pathExtention = filename.pathExtension
let pathPrefix = filename.deletingPathExtension

if let filepath = Bundle.main.path(forResource: pathPrefix, ofType: pathExtention) {
    do {
        let contents = try String(contentsOfFile: filepath, encoding: .utf8) 
    } catch {
        // contents could not be loaded
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM