如何在 Safari 应用程序扩展中加载本地 HTML 文件
How do I load a local HTML file in a Safari App Extension
我正在编写一个 Safari 应用程序扩展。在我的扩展文件夹中,我有一个 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
。这是上面示例的第 6 行,但使用了这样的绝对值 URL:
oReq.open('GET', safari.extension.baseURI + 'myfile.html');
使用 XMLHttpRequest 的一个更 hacky 的替代方法是将 HTML 文件加载到扩展程序全局页面内的 iframe 中,然后从脚本加载 iframed 页面的 "reading" 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
}
}
我正在编写一个 Safari 应用程序扩展。在我的扩展文件夹中,我有一个 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
。这是上面示例的第 6 行,但使用了这样的绝对值 URL:
oReq.open('GET', safari.extension.baseURI + 'myfile.html');
使用 XMLHttpRequest 的一个更 hacky 的替代方法是将 HTML 文件加载到扩展程序全局页面内的 iframe 中,然后从脚本加载 iframed 页面的 "reading" 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
}
}