首页 > 解决方案 > Nativescript 8:参考错误:带有 ably-nativescript 的窗口

问题描述

我最近将一个应用程序从 Nativescript 6 升级到了 Nativescript 8。在这个应用程序中,我使用 ably-nativescript 在 webview 和外部网站之间进行通信。在 v6 中一切正常,但在升级到 Nativescript 8 后,我收到了这个错误:

System.err: An uncaught Exception occurred on "main" thread.
System.err: Calling js method onPageStarted failed
System.err: ReferenceError: window is not defined
System.err:
System.err: StackTrace:
System.err: ./node_modules/ably/browser/static/ably-nativescript.js(file: node_modules\ably\browser\static\ably-nativescript.js:21:1)
System.err:     at __webpack_require__(file: app\webpack\bootstrap:24:0)
System.err:     at fn(file: app\webpack\runtime\hot module replacement:61:0)
System.err:     at ./node_modules/ably-nativescript/ably.js(file: node_modules\ably-nativescript\ably.js:2:0)
System.err:     at __webpack_require__(file: app\webpack\bootstrap:24:0)
System.err:     at fn(file: app\webpack\runtime\hot module replacement:61:0)
System.err:     at ./app/views/eitin/itin_show/eitin.js(file: app\app\views\eitin\itin_show\eitin.js:25:11)
System.err:     at __webpack_require__(file: app\webpack\bootstrap:24:0)
System.err:     at fn(file: app\webpack\runtime\hot module replacement:61:0)
System.err:     at webpackContext(file: app\app|sync|\.(xml|js|s:187:0)
System.err:     at loader(file: node_modules\@nativescript\core\globals\index.js:158:0)
System.err:     at loadModule(file: node_modules\@nativescript\core\globals\index.js:202:0)
System.err:     at createViewFromEntry(file: node_modules\@nativescript\core\ui\builder\index.js:25:0)
System.err:     at navigate(file: node_modules\@nativescript\core\ui\frame\frame-common.js:180:21)
System.err:     at exports.checkItinRedirection(file: app\app\views\calendars\fullcalendar\fullcalendar.js:152:0)
System.err:     at _handleEvent(file: node_modules\@nativescript\core\data\observable\index.js:233:0)
System.err:     at notify(file: node_modules\@nativescript\core\data\observable\index.js:216:0)
System.err:     at _onLoadStarted(file: node_modules\@nativescript\core\ui\web-view\web-view-common.js:28:0)
System.err:     at WebViewClientImpl.onPageStarted(file: node_modules\@nativescript\core\ui\web-view\index.android.js:30:0)
System.err:     at com.tns.Runtime.callJSMethodNative(Native Method)
System.err:     at com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1302)
System.err:     at com.tns.Runtime.callJSMethodImpl(Runtime.java:1188)
System.err:     at com.tns.Runtime.callJSMethod(Runtime.java:1175)
System.err:     at com.tns.Runtime.callJSMethod(Runtime.java:1153)
System.err:     at com.tns.Runtime.callJSMethod(Runtime.java:1149)
System.err:     at com.tns.gen.android.webkit.WebViewClient_vendor_54051_28_WebViewClientImpl.onPageStarted(WebViewClient_vendor_54051_28_WebViewClientImpl.java:40)
System.err:     at ic.c(PG:314)
System.err:     at An.handleMessage(PG:20)
System.err:     at android.os.Handler.dispatchMessage(Handler.java:107)
System.err:     at android.os.Looper.loop(Looper.java:214)
System.err:     at android.app.ActivityThread.main(ActivityThread.java:7356)
System.err:     at java.lang.reflect.Method.invoke(Native Method)
System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

我查看了 ably-nativescript 插件代码本身,抛出错误的区域是这样的:

(function webpackUniversalModuleDefinition(root, factory) {
    if(typeof exports === 'object' && typeof module === 'object')
        module.exports = factory(require("nativescript-websockets"));
    else if(typeof define === 'function' && define.amd)
        define(["nativescript-websockets"], factory);
    else if(typeof exports === 'object')
        exports["Ably"] = factory(require("nativescript-websockets"));
    else
        root["Ably"] = factory(root["nativescript-websockets"]);
})(window, function(__WEBPACK_EXTERNAL_MODULE__40__)

第二次引用此插件时,我每次都会收到该错误。

我检查了回购,基本上没有任何活动,也没有在 abil 的主要回购中提到这个问题,而且我找不到其他人有这个问题,所以我不太确定交易是什么。我知道NS在v8中改变了webpack,我对webpack有点不足,所以我不知道这是否是罪魁祸首,或者如果webpack确实是罪魁祸首,是否有解决方案。这个插件的代码多年来没有改变,如果窗口引用在 ns 6 中工作,我想可能在 7 和 8 之间的 NS 中发生了一些变化,这让我想知道它最初是如何工作的?

我当前的 v8 webpack 配置是这样的:

const webpack = require("@nativescript/webpack");

module.exports = (env) => {
    webpack.init(env);

    webpack.Utils.addCopyRule('fonts/**')
    webpack.Utils.addCopyRule('**/*.jpg')
    webpack.Utils.addCopyRule('**/*.png')
    webpack.Utils.addCopyRule('html_views/**')
        
    return webpack.resolveConfig();
};

有没有其他人遇到过这个问题,或者有谁知道我可以做些什么来恢复窗口参考?我知道 window 在 nativescript 中并不是一个真正可用的组件,因为它与浏览器的关系比移动设备更重要,这使得它更加混乱,因为我不知道他们为什么这样做,但不知何故它似乎并不重要v6 所以我很好奇发生了什么变化,或者这个插件是否不再与 nativescript 兼容?它没有出现在 ns7 的兼容列表中,但我也不相信它是一个详尽的列表。

对此的任何见解将不胜感激 - 谢谢:)

标签: nativescriptnativescript-pluginably-realtime

解决方案


推荐阅读