WKWebView web worker 抛出错误“Dom Exception 18 返回错误”。

Posted

技术标签:

【中文标题】WKWebView web worker 抛出错误“Dom Exception 18 返回错误”。【英文标题】:WKWebView web worker throws error "Dom Exception 18 returns an error." 【发布时间】:2016-09-16 08:38:41 【问题描述】:

我正在使用 PhoneGap 编写应用程序。我想使用 javascript Web Worker。它在 android 上运行良好。它也适用于带有 UIWebView 的 ios

我想在 iOS 9 中使用 WKWebView。我尝试使用 cordova-plugin-file 成功读取本地文件夹中的 .txt 文件。

我使用了以下教程: https://www.scirra.com/blog/ashley/25/hacking-something-useful-out-of-wkwebview

但这并没有解决它...

new Worker ('js/tested.js');
Dom Exception 18 returns an error.
new Worker ('www/js/tested.js');
Dom Exception 18 returns an error.

我试图指定工作 javascript 文件的完整路径,但我得到了同样的错误:

new Worker (file_path+'js/tested.js');
Dom Exception 18 returns an error.

那么如何创建worker呢?

【问题讨论】:

请看这个:***.com/questions/2704929/… 谢谢!我已经尝试过了,但同样的错误。 (网络工作者工作正常!) 【参考方案1】:

成功了!

Web workers without a separate Javascript file?

        var worker_js = null;

        function fetchLocalFileViaCordova(filename, successCallback, errorCallback)
        
            var path = cordova.file.applicationDirectory + "www/" + filename;

            window.resolveLocalFileSystemURL(path, function (entry)
            
                entry.file(successCallback, errorCallback);
            , errorCallback);
        ;

        function fetchLocalFileViaCordovaAsText(filename, successCallback, errorCallback)
        
            fetchLocalFileViaCordova(filename, function (file)
            
                var reader = new FileReader();

                reader.onload = function (e)
                
                    successCallback(e.target.result);
                ;

                reader.onerror = errorCallback;
                reader.readAsText(file);

            , errorCallback);
        ;

        fetchLocalFileViaCordovaAsText("js/worker.js", function (js_script)  // Worker WKWebView
            worker_js = window.URL.createObjectURL(
                new Blob([js_script],  type: "text/javascript" )
            );
        );

        if (worker_js != null) 
            backgroundEngine = new Worker(worker_js);
         else 
            backgroundEngine = new Worker("js/worker.js");
        

【讨论】:

以上是关于WKWebView web worker 抛出错误“Dom Exception 18 返回错误”。的主要内容,如果未能解决你的问题,请参考以下文章

Typescript + Worker Threads的Nodemon抛出错误

iOS 11.3 的 WKWebView 中的 Service Worker 不可用

在Service Worker中抛出错误“Uncaught(in promise)DOMException”

启动芹菜工人抛出“无属性'worker_state_db'”

Web Worker

WKWebView+contentInset 使内容大小错误