text: (function() {
  
    if (window.XuntongJSBridge) {
      // Android加上了这个if判断，如果当前window已经定义了XuntongBridge对象，不再重新加载
      // 避免重新初始化_callback_map等变量，导致之前的消息回调失败，返回cb404
      //alert('window already has a XuntongBridge object!!!');
      return;
    };
  
    /////////////////////////////////////////////////////////////////////////////////////////////////
    ///////////////////////////////////本地调用的实际逻辑////////////////////////////////////////////
    var _CUSTOM_PROTOCOL_SCHEME = 'xuntong',
      callbacksCount = 1,
      callbacks = {};
  
    function _handleMessageFromXT(callbackId, message) {
  
      try {
        var callback = callbacks[callbackId];
        if (!callback) return;
        callback.apply(null, [message]);
      } catch (e) {
        alert(e)
      }
    }
  
    /**
     * 获取用户ua信息,判断OS
     * @returns {string}
     */
    function getOS() {
      var userAgent = navigator.userAgent;
      return userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) ? 'ios' : userAgent.match(/Android/i) ? 'android' : '';
    }
    /**
     * 判断用户是否在云之家桌面端中
     * @returns {Array|{index: number, input: string}}
     */
    function isCloudHub() {
      var userAgent = navigator.userAgent;
      return userAgent.match(/App\/cloudhub/);
    }
  
    // Use this in javascript to request native objective-c code
    // functionName : string (I think the name is explicit :p)
    // args : array of arguments
    // callback : function with n-arguments that is going to be called when the native code returned
    function _call(functionName, message, callback) {
      //只有在手机或电脑端云之家中才允许调用Xuntong JSBridge
      if ( !(getOS() || isCloudHub()) )return false;
      var hasCallback = callback && typeof callback == "function";
      var callbackId = hasCallback ? callbacksCount++ : 0;
  
      if (hasCallback)
        callbacks[callbackId] = callback;
  
      var iframe = document.createElement("IFRAME");
      iframe.setAttribute("src", _CUSTOM_PROTOCOL_SCHEME + ":" + functionName + ":" + callbackId + ":" + encodeURIComponent(JSON.stringify(message)));
      // For some reason we need to set a non-empty size for the iOS6 simulator...
      iframe.setAttribute("height", "1px");
      iframe.setAttribute("width", "1px");
      document.documentElement.appendChild(iframe);
      iframe.parentNode.removeChild(iframe);
      iframe = null;
  
    }
  
  
  
  
    var __XuntongJSBridge = {
      // public
      invoke: _call,
      call: _call,
      handleMessageFromXT: _handleMessageFromXT
    };
  
    window.XuntongJSBridge = __XuntongJSBridge;
  
  })();
  