WKWebView не работает с классами JavaScript - PullRequest
0 голосов
/ 06 декабря 2018

Я работаю над проектом с WKWebView, и у меня есть загрузка HTML из локального проекта.JavaScript работает, как и ожидалось, но когда я пытаюсь использовать класс, это делает WebView просто пустым.

Я пытался использовать синтаксис ES6 и синтаксис ES5, они оба вызывают одну и ту же проблему.Есть ли способ использовать классы JavaScript в локальном html-файле в WKWebView?Если есть что я делаю не так?

Это мой код для приложения WebView

import UIKit
import WebKit

class ViewController: UIViewController {

let webView = WKWebView()
let remoteAccess = false
let url = "Website/index"

override func loadView(){

    if(remoteAccess){
        loadWebView(string: url)
    }else{
        loadLocalWebView(string: url)
    }

    self.view = webView
}

override var prefersStatusBarHidden: Bool{
    return true;
}

override func viewDidLoad() {
    super.viewDidLoad()

}

func loadWebView(string: String){
    if let url = URL(string: string){
        let request = URLRequest(url: url);
        webView.load(request)
    }else{
        print("Failed to connect to URL: " + string)
    }
}

func loadLocalWebView(string: String){
    if let url = Bundle.main.url(forResource: string, withExtension: "html"){
        webView.loadFileURL(url, allowingReadAccessTo: url.deletingLastPathComponent())
    }else{
        print(string + "not found!")
    }

}
}

Это код для HTML-файла

<!DOCTYPE html>
<html>
    <head>
        <title>Local Demo</title>
        <meta name="viewport" 
content="width=device-width, initial-scale=1">
        <link rel="stylesheet" type="text/css" 
href="index.css" />
    </head>
<body>
    <script>

        var display = new Display(window.innerWidth,window.innerHeight);
        var ctx = display.create();
        function render(){
            ctx.fillRect(0,0,100,100);
            requestAnimationFrame(render);
        }
        render();

        function Display(width,height){
            this.canvas = document.createElement("canvas");
            this.canvas.id = "canvas";
            this.canvas.width = width;
            this.canvas.height = height;
        }

        Display.prototype.create = function(){
            document.body.appendChild(this.canvas);
            this.ctx = canvas.getContext("2d");
            return this.ctx;
        }
    </script>
</body>

1 Ответ

0 голосов
/ 09 декабря 2018

Оказывается, проблема в том, что я определял класс после создания экземпляра, который не вызывал ничего, после переворачивания заказа все работало.

...