Я пишу расширение приложения Safari. В моей папке расширения у меня есть HTML-файл, который я хотел бы прочитать и добавить на веб-страницу с помощью Javascript. Я не могу понять, как читать в файле. Я открыт для этого, используя Javascript или код Swift. Любая помощь будет оценена, спасибо!Как загрузить локальный HTML-файл в расширение приложения Safari
ответ
В конце концов я выяснил, как это сделать в коде 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
}
}
Вы можете прочитать текст или 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 в этом примере является относительным. Если вы используете этот код на глобальной странице, он будет относиться к глобальной странице. Если вы используете его в инъецированном скрипте, он будет относиться к веб-странице, в которую вы вставляете скрипт, а это не то, что вы хотите. В этом случае вам нужно будет использовать абсолютный URL-адрес, начинающийся с базового URL-адреса расширения. Чтобы получить базовый URL-адрес, используйте safari.extension.baseURI
. Вот шестая строка из приведенного выше примера, но используя такой абсолютный URL:
oReq.open('GET', safari.extension.baseURI + 'myfile.html');
Более Hacky альтернативы использованию XMLHttpRequest является, чтобы загрузить файл HTML в IFRAME внутри глобальной страницы расширения, а затем «чтение» document.body.innerHTML
страницы iframed из сценария на глобальной странице.
Спасибо за ответ. Я смог разобраться с Swift как раз перед тем, как увидел этот пост, поэтому у меня не было возможности проверить. Работает ли safari.extension.baseURI с новым способом создания расширений приложений Safari? – NorthFork
Я не уверен, как это сделать на новой вкладке. Все, что я делал, было на уже открытой вкладке ... – NorthFork