#ios #webview #swift
#iOS #webview #swift
Вопрос:
Я начинаю осваивать этот новый язык, который мне очень нравится… но, похоже, это ошибка большая, чем я ожидал.
Я взял простой пример на youtube (https://www.youtube.com/watch?v=Rva9ylPHi2w ) создания WebView в корневом ViewController и загрузки веб-страницы. Этот пример отлично работает с внешней веб-страницей, но не с локальным файлом. При попытке открыть локальный файл я получаю пустой экран.
Приведенный ниже код предназначен для файла ViewController.swift.
import UIKit
class ViewController: UIViewController {
@IBOutlet var WebView : UIWebView
var URLPath = ""/files/test.html""
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
loadAddressURL()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func loadAddressURL() {
let requestURL = NSURL (string:URLPath)
let request = NSURLRequest(URL: requestURL)
println("the requestURL is: (requestURL)")
WebView.loadRequest(request)
}
}
Вы можете видеть, что я добавил println, чтобы показать используемый запрос URL, и он отображается в обратном порядке:
С локальным файлом я получаю «запрос: /files/test.html «, где у меня находится образец HTML-файла.
Я что-то сделал неправильно или мне следует отправить это в Apple?
Ответ №1:
Вот как я заархивировал для загрузки html из локального файла
let bundle = NSBundle.mainBundle()
var url = bundle.URLForResource("yourHTML", withExtension: "html");
var request = NSURLRequest(URL: url!);
webContent.loadRequest(request)
Ответ №2:
Вместо создания NSURL
с помощью этого конструктора используйте [NSURL fileURLWithPath:]
вместо этого.
Комментарии:
1. Да, я пробовал это раньше и получил очень странный путь в println: «requestURL — это: /files/test.html — file:///». Обратите внимание, как «file ///» вставляется после загрузки моей переменной, что, конечно, оставляет mw с пустым экраном, поскольку путь неверен.
2. Да, именно так
[NSURL description]
он выводится на печать, но на самом деле URL выглядит не так.3. Итак, он по-прежнему не работает, и все, что я получаю в эмуляторе, — это пустой WebView. Звучит так, будто я запускаю ошибку с Apple
4. Я очень, очень сомневаюсь, что это ошибка Apple. Поместите файл в каталог documents приложения и получите к нему доступ там.
5. Я начал с этого там, и там это тоже не сработало. Я перешел в каталог files в каталоге main apps, куда я в конечном итоге хочу, чтобы он попал.
Ответ №3:
На самом деле вы не можете загрузить «локальный файл». Вместо этого убедитесь, что ваш файл добавлен на Copy Bundle Resources
фазу сборки вашего целевого объекта, и запросите его URL по умолчанию NSBundle
, например, вот так:
let url = NSBundle.mainBundle().URLForResource("test", withExtension: "html")
Если файл находится в группе проектов (желтый значок), вам не нужно указывать какую-либо информацию о пути к файлу, потому что копируется файл, а не группа проектов.
Если файл находится в ссылке на папку (синий значок папки), вся папка копируется в пакет. В этом случае используйте URLForResource(, withExtension:, subdirectory:)
или любой подобный метод вместо этого. (Проверьте документацию или файл заголовка NSBundle
)
Комментарии:
1. Если я сделаю это таким образом, как я должен включать какую-либо информацию о пути?
2. @padapa О, извините, я предполагал, что вам не нужно было (см. правки)
3. Вы правы, я не видел изменений. Я попробую.
Ответ №4:
Я новичок, поэтому не доверяйте моему коду
Кажется, что это работает, однако это приводит к задержке моего xCode 6 (необычно.) Я воспользовался руководством, предоставленным AppleDev / Swift Dive (https://www.youtube.com/watch?v=Rva9ylPHi2w ) Если вы разместите свой index.html файл в индексе вашего приложения, это код для использования;
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var webview: UIWebView!
let url = NSBundle.mainBundle().URLForResource("index", withExtension: "html")
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
loadAddressURL()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func loadAddressURL() {
let request = NSURLRequest(URL: url!)
webview.loadRequest(request)
}
}
Индекс выглядит примерно так :
Folder Project/app/
Folder Project/app/AppDelaget.swift
Folder Project/app/ViewController.swift
Folder Project/app/main.storybord
Folder Project/app/index.html
Ответ №5:
UIWebView на языке Swift :-
Пожалуйста, обновите свой код и установите URLPath в двойные кавычки вот так
var URLPath = "/files/test.html"
вы также можете использовать этот код для WebView
self.webView!.loadRequest(NSURLRequest(URL:NSURL(string:"https://www.google.com")))