2017-01-17 46 views
-1

我正在編寫Safari應用程序擴展。在我的擴展文件夾中,我有一個我想閱讀的HTML文件,並使用Javascript附加到網頁。我無法弄清楚如何在文件中讀取。我願意使用Javascript或Swift代碼來完成它。任何幫助將不勝感激,謝謝!如何在Safari應用程序擴展中加載本地HTML文件

回答

-1

我終於搞清楚瞭如何在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 
    } 
} 
+0

我不確定如何在新選項卡中執行此操作。我所做的一切都在一個已經打開的標籤中...... – NorthFork

3

您可以閱讀文本或HTML文件中帶着幾分的XMLHttpRequest的,就像這樣:

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是相對的。如果您在全局頁面上使用此代碼,則它將相對於全局頁面。如果您在注入的腳本中使用它,它將與您將腳本插入到的網頁相關,這不是您想要的。在這種情況下,您需要使用以擴展程序的基本網址開頭的絕對網址。要獲取基準網址,請使用safari.extension.baseURI。下面是從上面的例子中的6號線,但使用這樣的絕對URL:

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

使用XMLHttpRequest的一個更哈克的選擇是載入你的HTML文件中的擴展的全球頁面中的iframe,然後在「讀書」 document.body.innerHTML來自全局頁面上腳本的iframed頁面。

+0

感謝您的回答。在我看到這篇文章之前,我能夠使用Swift搞清楚,所以我沒有機會去測試。 safari.extension.baseURI是否可以使用Safari App Extensions的新方式工作? – NorthFork

相關問題