如何在Safari App Extension

时间:2017-01-17 05:34:21

标签: swift swift3 safari-extension

我正在编写Safari App Extension。在我的扩展文件夹中,我有一个HTML文件,我想阅读并使用Javascript附加到网页。我无法弄清楚如何阅读文件。我愿意使用Javascript或Swift代码。任何帮助将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:4)

您可以使用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。要获取基本网址,请使用safari.extension.baseURI。这是上面示例中的第6行,但使用了这样的绝对URL:

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

使用XMLHttpRequest的一个更糟糕的替代方法是在扩展程序的全局页面内的iframe中加载HTML文件,然后从全局页面上的脚本“读取”iframed页面的document.body.innerHTML

答案 1 :(得分:-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
    }
}