TE对象message js脚本简单写法是什么

发布时间:2021-12-13 19:45:30 作者:柒染
来源:亿速云 阅读:182
# TE对象message js脚本简单写法是什么

## 什么是TE对象message

TE(Tableau Extensions)对象中的`message`是Tableau扩展功能中用于通信的核心机制,它允许扩展与Tableau工作簿之间进行双向数据传递。通过`message`对象,开发者可以:

1. 从Tableau获取工作簿数据
2. 向Tableau发送操作指令
3. 监听Tableau的状态变化

## 基础JS脚本写法示例

### 1. 初始化message通信

```javascript
tableau.extensions.initializeAsync().then(() => {
  // 初始化成功后执行
  const dashboard = tableau.extensions.dashboardContent;
  const worksheet = dashboard.worksheets.find(ws => ws.name === "Sales");
  
  // 获取数据示例
  worksheet.getSummaryDataAsync().then(summaryData => {
    console.log("获取到的数据:", summaryData);
  });
});

2. 发送简单message

function sendSimpleMessage() {
  tableau.extensions.ui.displayDialogAsync(
    "popup.html",
    JSON.stringify({ action: "refresh", data: {} }),
    { width: 400, height: 300 }
  ).then(closePayload => {
    console.log("返回的消息:", closePayload);
  });
}

3. 接收message的写法

// 在扩展的HTML页面中
window.addEventListener('message', event => {
  if (event.origin !== window.location.origin) return;
  
  const message = JSON.parse(event.data);
  switch(message.action) {
    case "update":
      updateData(message.payload);
      break;
    case "notify":
      showNotification(message.text);
      break;
  }
});

常用message模式

请求-响应模式

// 发送请求
function requestData() {
  return new Promise((resolve) => {
    const listener = (event) => {
      if (event.data.type === "DATA_RESPONSE") {
        window.removeEventListener('message', listener);
        resolve(event.data.payload);
      }
    };
    window.addEventListener('message', listener);
    
    parent.postMessage({
      type: "DATA_REQUEST",
      parameters: { sheet: "Monthly" }
    }, "*");
  });
}

事件监听模式

// 监听工作表切换事件
tableau.extensions.dashboardContent.dashboard.worksheets.forEach(worksheet => {
  worksheet.addEventListener(
    tableau.TableauEventType.FilterChanged,
    (event) => {
      console.log("筛选器变化:", event);
    }
  );
});

最佳实践建议

  1. 消息结构化:建议采用统一的消息格式

    {
     "version": "1.0",
     "timestamp": "2023-11-20T12:00:00Z",
     "type": "data_request/command/event",
     "payload": {}
    }
    
  2. 错误处理

    function safeSend(message) {
     try {
       if (!tableau.extensions) throw new Error("Tableau未初始化");
       parent.postMessage(JSON.stringify(message), "*");
     } catch (error) {
       console.error("消息发送失败:", error);
     }
    }
    
  3. 性能优化

    • 对高频消息进行节流处理
    • 对大体积数据使用分页传输
    • 避免在消息中包含DOM元素

调试技巧

  1. 使用浏览器开发者工具的网络选项卡监控postMessage
  2. 添加消息日志:
    
    console.log("发送消息:", {
     direction: "outbound",
     message: messageObj
    });
    
  3. 使用Tableau的调试模式:
    
    tableau.extensions.environment.debug = true;
    

完整示例代码

<!DOCTYPE html>
<html>
<head>
  <script src="tableau.extensions.1.latest.js"></script>
  <script>
    tableau.extensions.initializeAsync().then(() => {
      // 消息接收处理
      window.addEventListener('message', (event) => {
        const msg = JSON.parse(event.data);
        document.getElementById('status').innerText = msg.status;
      });

      // 发送初始化消息
      parent.postMessage(JSON.stringify({
        type: 'init',
        dashboard: tableau.extensions.dashboardContent.dashboard.name
      }), '*');
    });
  </script>
</head>
<body>
  <div id="status">等待连接...</div>
</body>
</html>

注意事项

  1. 跨域安全限制:确保消息只在可信源之间传递
  2. Tableau版本兼容性:不同版本的Tableau可能对message对象有不同实现
  3. 生命周期管理:及时移除不再使用的事件监听器
  4. 数据大小限制:单个message建议不超过1MB

通过以上示例和方法,开发者可以快速实现Tableau扩展与工作簿之间的高效通信。实际开发时应根据具体需求选择合适的消息模式,并注意错误处理和性能优化。 “`

推荐阅读:
  1. 调试message写法
  2. Python对象是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

te message js

上一篇:如何实现json 相关操作

下一篇:Storm 和JStorm该如何理解

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》