• 概述
  • 注册
    • iOS
    • Android
    • Web
  • 样例

    概述

    v0.9.5+

    JSService 和 Weex 实例在 JS Runtime 中并行运行。Weex 实例的生命周期可调用 JSService 生命周期。目前提供创建、刷新、销毁生命周期。
    JSService 和前端世界里的 vendor.js 一样,它通常用于将每个页面中的重复js函数移至全局环境。

    重要提醒: JSService 使用不当会导致内存增高或全局污染!

    注册

    iOS

    1. [WXSDKEngine registerService:@"SERVICE_NAME" withScript: @"SERVICE_JS_CODE" withOptions: @{}];
    2. // or
    3. [WXSDKEngine registerService:@"SERVICE_NAME" serviceScriptUrl: @"SERVICE_JS_URL" withOptions: @{}];

    Android

    1. HashMap<String, String> options = new HashMap<>()
    2. options.put("k1", "v1")
    3. String SERVICE_NAME = "SERVICE_NAME"
    4. String SERVICE_JS_CODE = "SERVICE_JS_CODE"
    5. boolean result = WXSDKEngine.registerService(SERVICE_NAME, SERVICE_JS_CODE, options)

    params of options Could have { create, refresh, destroy } lifecycle methods. In create method it should return an object of what variables or classes would be injected into the Weex instance.

    Web

    1. <script src="SERVICE_JS_CODE_URL"></script>

    样例

    1. service.register(SERVICE_NAME /* same string with native */, {
    2. /**
    3. * JSService lifecycle. JSService `create` will before then each instance lifecycle `create`. The return param `instance` is Weex protected param. This object will return to instance global. Other params will in the `services` at instance.
    4. *
    5. * @param {String} id instance id
    6. * @param {Object} env device environment
    7. * @return {Object}
    8. */
    9. create: function(id, env, config) {
    10. return {
    11. instance: {
    12. InstanceService: function(weex) {
    13. var modal = weex.requireModule('modal')
    14. return {
    15. toast: function(title) {
    16. modal.toast({ message: title })
    17. }
    18. }
    19. }
    20. },
    21. NormalService: function(weex) {
    22. var modal = weex.requireModule('modal')
    23. return {
    24. toast: function(title) {
    25. modal.toast({ message: title })
    26. }
    27. }
    28. }
    29. }
    30. },
    31. /**
    32. * JSService lifecycle. JSService `refresh` will before then each instance lifecycle `refresh`. If you want to reset variable or something on instance refresh.
    33. *
    34. * @param {String} id instance id
    35. * @param {Object} env device environment
    36. */
    37. refresh: function(id, env, config){
    38. },
    39. /**
    40. * JSService lifecycle. JSService `destroy` will before then each instance lifecycle `destroy`. You can deleted variable here. If you doesn't detete variable define in JSService. The variable will always in the js runtime. It's would be memory leak risk.
    41. *
    42. * @param {String} id instance id
    43. * @param {Object} env device environment
    44. * @return {Object}
    45. */
    46. destroy: function(id, env) {
    47. }
    48. })

    Use JSService

    1. <script>
    2. var _InstanceService = new InstanceService(weex)
    3. var _NormalService = new service.NormalService(weex)
    4. module.exports = {
    5. created: fucntion() {
    6. // called modal module to toast something
    7. _InstanceService.toast('Instance JSService')
    8. _NormalService.toast('Normal JSService')
    9. }
    10. }
    11. </script>