web/assets/libs/arale/messenger/2.0.1/messenger.js

(开头部分) 2KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

/**
 *     __  ___
 *    /  |/  /___   _____ _____ ___   ____   ____ _ ___   _____
 *   / /|_/ // _ \ / ___// ___// _ \ / __ \ / __ `// _ \ / ___/
 *  / /  / //  __/(__  )(__  )/  __// / / // /_/ //  __// /
 * /_/  /_/ \___//____//____/ \___//_/ /_/ \__, / \___//_/
 *                                        /____/
 *
 * @description MessengerJS, a common cross-document communicate solution.
 * @author biqing kwok
 * @version 2.0
 * @license release under MIT license
 */
define(function(require, exports, module) {
  module.exports = (function () {

    // 消息前缀, 建议使用自己的项目名, 避免多项目之间的冲突
    // !注意 消息前缀应使用字符串类型
    var prefix = "[PROJECT_NAME]",
      supportPostMessage = 'postMessage' in window;

    // Target 类, 消息对象
    function Target(target, name, prefix) {
      var errMsg = '';
      if (arguments.length < 2) {
        errMsg = 'target error - target and name are both required';
      } else if (typeof target != 'object') {
        errMsg = 'target error - target itself must be window object';
      } else if (typeof name != 'string') {
        errMsg = 'target error - target name must be string type';
      }
      if (errMsg) {
        throw new Error(errMsg);
      }
      this.target = target;
      this.name = name;
      this.prefix = prefix;
    }

    // 往 target 发送消息, 出于安全考虑, 发送消息会带上前缀
    if (supportPostMessage) {
      // IE8+ 以及现代浏览器支持
      Target.prototype.send = function (msg) {
        this.target.postMessage(this.prefix + '|' + this.name + '__Messenger__' + msg, '*');
      };
    } else {
      // 兼容IE 6/7
      Target.prototype.send = function (msg) {
        var targetFunc = window.navigator[this.prefix + this.name];
        if (typeof targetFunc == 'function') {
          targetFunc(this.prefix + msg, window);
        } else {
          throw new Error("target callback function is not defined");
        }
      };
    }

    // 信使类
    // 创建Messenger实例时指定, 必须指定Messenger的名字, (可选)指定项目名, 以避免Mashup类应用中的冲突
    // !注意: 父子页面中projectName必须保持一致, 否则无法匹配

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。