使用 swift 将本地 html 加载到 UIWebView

Posted

技术标签:

【中文标题】使用 swift 将本地 html 加载到 UIWebView【英文标题】:Load local html into UIWebView using swift 【发布时间】:2014-12-26 03:59:48 【问题描述】:

今天一大早就让我发疯了。我想将一些本地 html 加载到 web 视图中:

class PrivacyController: UIViewController 

    @IBOutlet weak var webView:UIWebView!

    override func viewDidLoad() 
        let url = NSURL(fileURLWithPath: "privacy.html")
        let request = NSURLRequest(URL: url!)
        webView.loadRequest(request)
    

html 文件位于我项目的根文件夹中,但在一个组内。 webview对我来说是空白的。有什么想法有什么问题吗?我在 xcode 6.1 上并在我的 iphone 6 上运行这个示例。

【问题讨论】:

这可能对你有帮助***.com/questions/24591926/… 【参考方案1】:

要检索应用程序资源的 URL,您应该使用 NSBundle 类的 URLForResource 方法。

斯威夫特 2

let url = NSBundle.mainBundle().URLForResource("privacy", withExtension:"html") 

斯威夫特 3

let url = Bundle.main.url(forResource: "privacy", withExtension: "html")

【讨论】:

关键是它必须是“privacy”而不是“privacy.html”。这就是为什么它对我不起作用的原因。 只是为了添加.. 与 Swift 4 及更高版本完美配合【参考方案2】:

Swift 3:输入安全

@IBOutlet weak var webView: UIWebView!

override func viewDidLoad() 
    super.viewDidLoad()

    // Adding webView content
    do 
        guard let filePath = Bundle.main.path(forResource: "myFile", ofType: "html")
            else 
                // File Error
                print ("File reading error")
                return
        

        let contents =  try String(contentsOfFile: filePath, encoding: .utf8)
        let baseUrl = URL(fileURLWithPath: filePath)
        webView.loadHTMLString(contents as String, baseURL: baseUrl)
    
    catch 
        print ("File HTML error")
    

记住:NS = Not Swift :]

【讨论】:

谢谢@Peter Kreinz 为什么第一次加载需要几秒钟?【参考方案3】:
// Point UIWebView
@IBOutlet weak var webView: UIWebView!

override func viewDidLoad() 
    super.viewDidLoad()

    //load a file
    var testHTML = NSBundle.mainBundle().pathForResource("privacy", ofType: "html")
    var contents = NSString(contentsOfFile: testHTML!, encoding: NSUTF8StringEncoding, error: nil)
    var baseUrl = NSURL(fileURLWithPath: testHTML!) //for load css file

    webView.loadHTMLString(contents, baseURL: baseUrl)


【讨论】:

您好我正面临加载 HTML 文件的嵌套文件,例如:WKWebView 中的 CSS 文件。这是出于安全目的还是出于其他目的?【参考方案4】:

Swift 3 3:)

if let url = Bundle.main.url(forResource: "privacy", withExtension: "html") 
    webview.loadRequest(URLRequest(url: url))

【讨论】:

【参考方案5】:

Swift 2.1 版

这种情况还包括编码

// load HTML String with Encoding
let path = NSBundle.mainBundle().pathForResource("policy", ofType: "html")
do 
    let fileHtml = try NSString(contentsOfFile: path!, encoding: NSUTF8StringEncoding)
    webView.loadHTMLString(fileHtml as String, baseURL: nil)

catch 


【讨论】:

【参考方案6】:

将本地 HTML 文件添加到您的项目中并将该文件命名为 home.html,然后使用 NSURL 对象创建 NSURLRequest。之后将请求传递给 Web 视图,它将请求的 URL 加载到 Web 视图中,如果您不使用情节提要,请将 uiwebview 添加到视图控制器视图中,如下面的代码。

 override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let localfilePath = NSBundle.mainBundle().URLForResource("home", withExtension: "html");
        let myRequest = NSURLRequest(URL: localfilePath!);
        myWebView.loadRequest(myRequest);
        self.view.addSubview(myWebView)
    

更多参考请参考http://sourcefreeze.com/uiwebview-example-using-swift-in-ios/

【讨论】:

【参考方案7】:

这对我有用:

@IBOutlet weak var mWebView: UIWebView!

override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    mWebView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("fineName", ofType: "html")!)))


info.plist 文件中添加了 App Transport Security SettingsDictionary 类型。还为 App Transport Security Settings 添加了子键 Allow Arbitrary Loads,类型为 Boolean,值为 YES

Here 是教程。

已编辑

对于 Swift 3 (Xcode 8)

mWebView.loadRequest(URLRequest(url: URL(fileURLWithPath: Bundle.main.path(forResource: "test/index", ofType: "html")!)))

【讨论】:

【参考方案8】:

您可以在 UIWebView 中加载 html 字符串或本地 html 文件。

HTML 字符串:

func loadHtmlCode() 
    let htmlCode = "<html><head><title>Wonderful web</title></head> <body><p>wonderful web. loading html code in <strong>UIWebView</strong></></body>"
    webView.loadHTMLString(htmlCode, baseURL: nil)

HTML 文件:

func loadHtmlFile() 
    let url = NSBundle.mainBundle().URLForResource("contactus", withExtension:"html")
    let request = NSURLRequest(URL: url!)
    webView.loadRequest(request)

详细信息可以在这里找到: http://webindream.com/load-html-uiwebview-using-swift/

【讨论】:

如何在 loadHtmlCode() 中显示图像,因为我尝试过但图像为空,显示 @farhad rubel 我试过这样 let htmlCode = " Wonderful web

wonderful web. loading html code在 UIWebView

>"
【参考方案9】:

这里是 Swift 4

的简洁版本

1) 添加导入import WebKit

2) 在你的项目中添加WebKit.framework

@IBOutlet weak var webView: WKWebView!

if let filePath = Bundle.main.url(forResource: "FILE_NAME", withExtension: "html") 
  let request = NSURLRequest(url: filePath)
  webView.load(request as URLRequest)

【讨论】:

【参考方案10】:

对于 swift 3 使用这个:

do
    
        let testHTML = Bundle.main.path(forResource: "about", ofType: "html")
        let contents =  try NSString(contentsOfFile: testHTML!, encoding: String.Encoding.utf8.rawValue)
        let baseUrl = NSURL(fileURLWithPath: testHTML!) //for load css file

        mWebView.loadHTMLString(contents as String, baseURL: baseUrl as URL)
    
    catch
    

    

【讨论】:

【参考方案11】:

Swift 4.2、Xcode 10.1、WKWebView 从文件加载 HTML。 UIWebView 已弃用。

在 iOS 8 及更高版本中运行的应用程序中,使用 WKWebView 类而不是 UIWebView。

import WebKit

@IBOutlet weak var webView: WKWebView!

override func viewDidLoad() 
    super.viewDidLoad()

    let localFilePath = Bundle.main.url(forResource: "document_terms_of_use", withExtension: "html")
    let request = NSURLRequest(url: localFilePath!)
    webView.load(request as URLRequest)

【讨论】:

【参考方案12】:

swift 4.2 和 5:

let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 1024, height: 768))
let url = URL(string: PERS_Path)
webView?.navigationDelegate = self
webView?.uiDelegate = self
webView!.loadFileURL(url!, allowingReadAccessTo: url!)
self.view. addSubview(webView)

别忘了添加这个WKNavigationDelegate, WKUIDelegate

【讨论】:

【参考方案13】:

这对我有用(Xcode 8、Swift 3)

@IBOutlet 弱变量 webViewer: UIWebView!

override func viewDidLoad() 
    super.viewDidLoad()

    let localfilePath = Bundle.main.url(forResource: "homeInfo", withExtension: "html");
    let myRequest = NSURLRequest(url: localfilePath!);
    webViewer.loadRequest(myRequest as URLRequest);
    self.view.addSubview(webViewer)

【讨论】:

以上是关于使用 swift 将本地 html 加载到 UIWebView的主要内容,如果未能解决你的问题,请参考以下文章

在 WKWebView (iOS, Swift) 中使用本地 Javascript 源加载本地 HTML

从 URL 加载图像并使用 Swift4 将它们存储在本地

使用 Swift 3 将 iframe 标记(视频)从 html 字符串加载到 Web 视图中

如何获取所有本地图像并将其加载到swift中的数组中

如何将本地 HTML 文件导入到我的 Swift Playground Live View?

在 WKwebView (SWIFT) 中加载本地资源以及 HTML 字符串?