使用 WL.Client.reloadApp 重新加载应用程序时是不是调用 wlcommoninit

Posted

技术标签:

【中文标题】使用 WL.Client.reloadApp 重新加载应用程序时是不是调用 wlcommoninit【英文标题】:Does wlcommoninit get called when the app is reloaded using WL.Client.reloadApp使用 WL.Client.reloadApp 重新加载应用程序时是否调用 wlcommoninit 【发布时间】:2016-04-02 17:43:33 【问题描述】:

使用 WL.Client.reloadApp 重新加载应用时是否调用 wlcommoninit??

我在混合应用中有用户注销功能。注销后,会调用 WL.Client 的 reloadApp() 方法。似乎重新加载后 wlcommoninit 没有被调用。如果我杀死应用程序并重新启动它,它会被调用。

我们使用的 MobileFirst 版本是 7.1。 添加: 日志中有一个 Cordova.js 错误,这可能会阻止 wlCommonInit() 在 logout + reloadApp 后被调用:

12-28 16:52:18.354: I/chromium(9539): [INFO:CONSOLE(309)] “错误 成功callbackId:App414539960:错误:未知事件操作 未定义”,来源: file:///android_asset/www/default/worklight/cordova.js (309)

12-28 16:52:18.354: I/chromium(9539): [INFO:CONSOLE(1576)] “未捕获 (承诺)错误:未知事件操作未定义”,来源: file:///android_asset/www/default/worklight/cordova.js (1576)

【问题讨论】:

【参考方案1】:

您没有提及您使用的是哪个版本的 MobileFirst Platform Foundation(或 Worklight),但我不确定在这种情况下它是否真的重要。

我刚刚在 7.1 上进行了测试,并确认当您使用 WL.Client.reloadApp() 重新加载应用程序时实际上调用了 wlCommonInit()。

我通过获取示例“Hello MobileFirst”应用程序(创建新的 MobileFirst Platform 混合应用程序时自动创建的模板)将其添加到 index.html 文件中来做到这一点:

<a onClick="WL.Client.reloadApp();">Click Me</a>

然后在 wlCommonInit() 中添加这个:

alert("init");

警报在应用程序首次初始化时显示,并且当您单击应用程序中的“单击我”链接时也会显示,确认在这种情况下正在调用 wlCommonInit()。

我没有在任何实际设备上尝试过,但是我在 Common Resources 和 Android 环境的预览版中尝试过,并且在桌面浏览器环境中也尝试过,并且在所有三个地方都得到了相同的结果。

如果您可以编辑您的问题以提供更多信息(例如,可能是指向您的实际 MFP 项目的链接,和/或您观察到的导致您相信没有调用 wlCommonInit() 的内容),可以提供一个更有用的答案。但是,就您提出的具体问题而言 - 是的,当您调用 WL.Client.reloadApp() 时肯定会调用 wlCommonInit()。

【讨论】:

嗨帕特,谢谢你的澄清。我们已经提出了一个 PMR (26237,756,000),并提供了更多信息。似乎有一个 Cordova.js 错误阻止了 wlCommonInit() 被调用。【参考方案2】:

我也有同样的问题,但我认为这是我的错。迁移脚本已成功迁移我的 android/res/xml/config.xml 文件以包含最新的所需 MobileFirst 插件,但我已将其从源存储库中排除,因此我没有签入最新版本并且仍在使用我的应用程序中的旧版本。一旦我手动复制了正确迁移的 config.xml 一切正常。

您能否验证您的 config.xml 是否包含 Android 所需的所有 MobileFirst 插件。这是适用于我的示例 config.xml。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
--><widget xmlns="http://www.w3.org/ns/widgets" id="PluginDevelopment" version="1.0.0.0">
    <name>PluginDevelopment</name>

    <description>
        PluginDevelopment
    </description>

    <author email="application author's e-mail" href="http://mycompany.com">
        application's author
    </author>

    <access origin="*"/>
    <preference name="loglevel" value="DEBUG"/>
    <!--
      <preference name="splashscreen" value="resourceName" />
      <preference name="backgroundColor" value="0xFFF" />
      <preference name="loadUrlTimeoutValue" value="20000" />
      <preference name="InAppBrowserStorageEnabled" value="true" />
      <preference name="disallowOverscroll" value="true" />
    -->
    <!-- This is required for native Android hooks -->
    <feature name="App">
        <param name="android-package" value="org.apache.cordova.App"/>
    </feature>
    <feature name="Device">
        <param name="android-package" value="org.apache.cordova.device.Device"/>
    </feature>
    <feature name="Accelerometer">
        <param name="android-package" value="org.apache.cordova.devicemotion.AccelListener"/>
    </feature>
    <feature name="Compass">
        <param name="android-package" value="org.apache.cordova.deviceorientation.CompassListener"/>
    </feature>
    <feature name="Media">
        <param name="android-package" value="org.apache.cordova.media.AudioHandler"/>
    </feature>         
    <feature name="Camera">
        <param name="android-package" value="org.apache.cordova.camera.CameraLauncher"/>
    </feature>
    <feature name="Contacts">
        <param name="android-package" value="org.apache.cordova.contacts.ContactManager"/>
    </feature>
    <feature name="File">
        <param name="android-package" value="org.apache.cordova.file.FileUtils"/>
    </feature>
    <feature name="Notification">
        <param name="android-package" value="org.apache.cordova.dialogs.Notification"/>
    </feature>    
    <feature name="FileTransfer">
        <param name="android-package" value="org.apache.cordova.filetransfer.FileTransfer"/>
    </feature>
    <feature name="Capture">
        <param name="android-package" value="org.apache.cordova.mediacapture.Capture"/>
    </feature>
    <feature name="Battery">
        <param name="android-package" value="org.apache.cordova.batterystatus.BatteryListener"/>
    </feature>
    <feature name="SplashScreen">
        <param name="android-package" value="org.apache.cordova.splashscreen.SplashScreen"/>
    </feature> 
    <feature name="Globalization">
        <param name="android-package" value="org.apache.cordova.globalization.Globalization"/>
    </feature>
    <feature name="InAppBrowser">
        <param name="android-package" value="org.apache.cordova.inappbrowser.InAppBrowser"/>
    </feature>    
    <feature name="Vibration">
        <param name="android-package" value="org.apache.cordova.vibration.Vibration"/>
    </feature>

<feature name="WLInitializationPlugin">
        <param name="android-package" value="com.worklight.androidgap.plugin.WLInitializationPlugin"/>
        <param name="onload" value="true"/>
    </feature>
    <feature name="UserAuth">
        <param name="android-package" value="com.worklight.androidgap.plugin.UserAuthPlugin"/>
        <param name="onload" value="false"/>
    </feature>
    <feature name="LoggerPlugin">
        <param name="android-package" value="com.worklight.androidgap.plugin.LoggerPlugin"/>
    </feature>
    <feature name="WLApp">
        <param name="android-package" value="com.worklight.androidgap.plugin.WLApp"/>
    </feature>
    <feature name="NativePage">
        <param name="android-package" value="com.worklight.androidgap.plugin.NativePage"/>
    </feature>
    <feature name="NativeBusyIndicator">
        <param name="android-package" value="com.worklight.androidgap.plugin.BusyIndicator"/>
    </feature>
    <feature name="SecurityPlugin">
        <param name="android-package" value="com.worklight.androidgap.plugin.SecurityPlugin"/>
    </feature>
    <feature name="StoragePlugin">
        <param name="android-package" value="com.worklight.androidgap.plugin.StoragePlugin"/>
    </feature>
    <feature name="Push">
        <param name="android-package" value="com.worklight.androidgap.plugin.Push"/>
    </feature>
    <feature name="WebResourcesDownloader">
        <param name="android-package" value="com.worklight.androidgap.plugin.WebResourcesDownloaderPlugin"/>
    </feature>
    <feature name="WLDirectUpdatePlugin">
        <param name="android-package" value="com.worklight.androidgap.plugin.WLDirectUpdatePlugin"/>
    </feature>
    <feature name="NetworkDetector">
        <param name="android-package" value="com.worklight.androidgap.plugin.NetworkDetector"/>
    </feature>
    <feature name="DeviceAuth">
        <param name="android-package" value="com.worklight.androidgap.plugin.DeviceAuthPlugin"/>
    </feature>
    <feature name="WifiPlugin">
        <param name="android-package" value="com.worklight.androidgap.plugin.WifiPlugin"/>
    </feature>
    <feature name="WLGeolocationPlugin">
        <param name="android-package" value="com.worklight.androidgap.plugin.WLGeolocationPlugin"/>
    </feature>
    <feature name="ForegroundBinderPlugin">
        <param name="android-package" value="com.worklight.androidgap.plugin.ForegroundBinderPlugin"/>
    </feature>
    <feature name="FIPSHttpPlugin">
        <param name="android-package" value="com.worklight.androidgap.plugin.FIPSHttpPlugin"/>
    </feature>
    <feature name="WLCustomDialog">
        <param name="android-package" value="com.worklight.androidgap.plugin.WLCustomDialog"/>
    </feature>
    <feature name="NetworkStatus">
        <param name="android-package" value="com.worklight.androidgap.plugin.WLNetworkManager"/>
    </feature>
    <feature name="WLSplashScreen">
        <param name="android-package" value="com.worklight.androidgap.plugin.WLSplashScreenPlugin"/>
    </feature>
    <feature name="WLNativeXHRPlugin">
        <param name="android-package" value="com.worklight.androidgap.plugin.WLNativeXHRPlugin"/>
    </feature>
    <feature name="WLActionSenderPlugin">
        <param name="android-package" value="com.worklight.androidgap.plugin.WLActionSenderPlugin"/>
    </feature>
    <feature name="StatusBar">
        <param name="android-package" value="org.apache.cordova.statusbar.StatusBar"/>
    </feature>
    <feature name="WLAuthorizationManagerPlugin">
        <param name="android-package" value="com.worklight.androidgap.plugin.WLAuthorizationManagerPlugin"/>
    </feature>
    <feature name="WLCertificatePinningPlugin">
        <param name="android-package" value="com.worklight.androidgap.plugin.WLCertificatePinningPlugin"/>
    </feature
</widget>

【讨论】:

我还通过进一步的测试注意到,如果您的应用程序未部署到 MobileFirst Development Server 进行测试,您会收到此错误。确保您还部署了您的应用程序。对于这种情况,我们曾经收到更好的错误消息,如果能修复它也很好。

以上是关于使用 WL.Client.reloadApp 重新加载应用程序时是不是调用 wlcommoninit的主要内容,如果未能解决你的问题,请参考以下文章

使用重新选择计算派生状态时如何避免 React 重新渲染

怎样使用系统管理员权限重新登录windows

使用 appcache 在服务器上重新部署后 Meteor 不断重新加载

避免页面重新加载以及使用 Javascript/JQuery 重新加载时 [重复]

使用 ConfigurationManager.RefreshSection 重新加载配置而不重新启动应用程序

如何使用 Spring 重新加载属性?