2017-01-21 14 views
10

iOS 10 uygulamamda temel bir foo.html kullanıyorum. biçimlendirme basittir:WKWebView tarafından yüklenen bir HTML dosyasına JavaScripts gömülü erişilebilir mi?

<!doctype html> 
<html> 
    <head> 
     <meta charset="utf-8"> 
     <meta http-equiv="x-ua-compatible" content="ie=edge"> 
     <title>Example</title> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
    </head> 
    <body> 
     <p>Hello, World!</p> 

     <div id="container"></div> 
    </body> 
    <script type="text/javascript" src="bar.js"></script> 
    <script type="text/javascript"> 
     // Bar is defined in bar.js 
     var bar = new Bar(); 
    </script> 
</html> 

aşağıdaki ile yük: Benim iOS uygulamasında

let htmlFile = Bundle.main.path(forResource: "foo", ofType: "html") 
let html = try? String(contentsOfFile: htmlFile!, encoding: String.Encoding.utf8) 
webView.loadHTMLString(html!, baseURL: nil) 

, ben bar değişken erişmeye çalışıyorum. teyit olarak DOM WKNavigationDelegate en yöntemiyle tarafından yüklenen sonra: func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)

bu gibi bir kod vardır:

var htmlContent : String { 
    var s = "console.log(bar)" 

    return s 
} 

webView.evaluateJavaScript(htmlContent, completionHandler: { result, error in 
    if let error = error { 
    print("error: \(error)") 
    } 

    if let result = result { 
    print("result: \(result)") 
    } 
}) 

Hatayla sona:

error: Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo={WKJavaScriptExceptionLineNumber=1, WKJavaScriptExceptionMessage=ReferenceError: Can't find variable: Bar, WKJavaScriptExceptionSourceURL=about:blank, NSLocalizedDescription=A JavaScript exception occurred, WKJavaScriptExceptionColumnNumber=47} 

Ben çalıştığım şey mi mümkün mü? Soruna farklı bir şekilde yaklaşmalı mıyım? evaluateJavaScript, yüklendikten sonra DOM'ımın kapsamına erişir çünkü şu an itibariyle olduğu gibi görünmüyor.

+0

tam olarak aynı kodu gösteriyorsun? 'WKJavaScriptExceptionColumnNumber = 47', JavaScript kodunun 'webView.evaluateJavaScript' öğesine iletildiğini en az 48 karaktere sahip olduğunu ancak 'htmlContent' değerinizin yalnızca 16 olduğunu öne sürüyor. Doğru bilgiyi göstermeden kimse size yardımcı olamaz. – OOPer

+0

Tam kod değil, ancak tam kod şu anda herhangi bir yolla bağlamda yardımcı olmaz. Bu örnekte tam olarak ne yapıyor ve 'bar.js' içeriğine erişilemiyormuş gibi görünüyor,' bar.js' içinde namespace/code var olan bir nesne yaratmaya çalışıyor. kapsamı – randombits

+0

Tam kod, birçok küçük hata olasılığını ortadan kaldırmaya yardımcı olur. Her neyse, ödül sana yardımcı olur. İyi şanslar. – OOPer

cevap

10

ben bunu anladım - bu başkası yardımcı olur umuduyla burada cevap verecek:

sorun buradaydı:

webView.loadHTMLString(html!, baseURL: nil)

Ben baseURL aşağıdaki düzeltmeleri nil olmadığından emin olun zorunda o: o hatayı alınca

webView.loadHTMLString(html!, baseURL: Bundle.main.bundleURL)

+13

Huzur içinde 500 rep :( – FrankerZ

+0

@ FrankerZ ve randombits, Form düzgün yükleniyor mu? –

İlgili konular