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.
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
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
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