热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JS跨域通信方法及SF相关问题

JS跨域通信方法及SF相关问题*--pre{background-color:#2f4f4f;line-height:1.6;FONT:10.5pt

JS跨域通信方法及SF相关问题

Table of Contents

  • 1 背景
  • 2 跨域通信方法
    • 2.1 iframe 的跨域通信
    • 2.2 ajax的跨域通信问题
    • 2.3 采用js调用的优势和iframe及ajax各自的应用场景
    • 2.4 遇到的问题
  • 3 附1:sfdc的Mixed_DML_OPERATION错误解决方法
  • 4 附2:java操作sf对象

1 背景

目前客服操作处理平台查询订单及退款操作的实时性非常差,主要是由于Salesforce通过后台apex类以Web服务API的形式调用点评内部数据,严重依赖于SF数据中心访问DP网络的链路稳定性。所以我们提出了一个新的技术方案,将SalesForce与DP内部系统进行集成,在SalesForce页面中通过JS直接调用DP内部数据。旧方案与新方案可以用如下两张图表示: 1.旧方案 2.新方案 在新方案的实施中需要解决一个重要的问题就是JS的跨域通信问题。由于浏览器同源策略的限制,不同域之间属性和操作是无法直接交互的,所以在这个时候,开发者多多少少需要一些方案来突破这些限制。跨域问题涉及的地方也很多,目前网上也可以找到各种解决方法1,在尝试了iframe的跨域通信和多种ajax的跨域通信示例后,总结了两种比较推荐的方式。分享如下:

2 跨域通信方法

2.1 iframe 的跨域通信

iframe的跨域通信比较推荐的是采用信使的方式。基本地原理是在iframe的内部再创建一个iframe(称之为信使),父子页面轮询信使的window.name,父子页面各自使用变量保存window.name,轮询时发现有变化即被视为收到消息。摘自1.

作为一个通用的解决方案,目前已经有人提供一个js文件,封装通信的接口,需要通信的页面只要加载js文件就行。js的下载地址见2.
调用的js如下:

// 父页面中
// 初始化信使, 告知与其交互的iframe引用
var messenger = Messenger.initInParent(iframeEl);

// 监听消息
messenger.Onmessage= function (data) {
          ...
};

// 发送消息
messenger.send(message);

// iframe中
// 初始化信使
var messenger = Messenger.initInIframe();

// 监听消息
messenger.Onmessage= function (data) {
      ...
};

// 发送消息
messenger.send(message);

也可以参考Demo3以及GitHub项目4.上次咱们组评审的预研Demo中采用的就是这种方式的iframe跨域通信。

2.2 ajax的跨域通信问题

ajax的跨域通信方式比较推荐的是jquery自带的jQuery.getJSON(url,function)方法通过jsonp的数据方式调用。基本的原理是通过使用jsonp这种类型,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。意思就是远程服务端需要对返回的数据做下处理,根据客户端提交的callback的参数,返回一个callback(json)的数据,而客户端将会用script的方式处理返回数据5, 6
客户端跨域的代码可以简单写成如下形式:

jQuery.getJSON("http://www.geonames.org/postalCodeLookupJSON?postalcode=10504&country=US&callback=?", function(data) {
    $.each(data.postalcodes, function(i, n){
        alert(n.adminName2);
         });
});
http://www.geonames.org/postalCodeLookupJSON?postalcode=10504&country=US&callback=?

该地址为互联网上一个现成的JSONP服务,可以用来做Demo。刚刚在本地验证了下这种ajax跨域请求的可行性。
如果需要自己写服务器端的jsonp数据返回,可以参考7

2.3 采用js调用的优势和iframe及ajax各自的应用场景

改成SF页面通过JS方式调用DP内部数据会提升数据获取的实时性。iframe比较适合于一片完整的区域,可以有自己的js和css效果,ajax比较适用于SF局部文字区域的刷新。

2.4 遇到的问题

目前将本地验证通过的js代码在SF页面中运行来调用

http://www.geonames.org/postalCodeLookupJSON?postalcode=10504&country=US&callback=?

没有响应,待进一步研究。

3 附1:sfdc的Mixed_DML_OPERATION错误解决方法

同时也附带分享一个SFDC在UT的时候遇到的一个MIXED_DML_OPERATION问题,在google上搜到了一篇文章来解决这个问题8.这个问题一般发生的场景描述如:

You can easily run into this error if you are trying to perform DML on setup and non-setup objects in the same transaction. 
Non-Setup objects can be any one of standard objects like Account or any custom object, here are few examples of the Setup Objects

Group1
GroupMember
QueueSObject
User2
UserRole
UserTerritory
Territory

解决方法:利用该网页中封装的MixedDMLOps.cls在报错的操作SF数据库的地方使用该类的增删改查方法就行。如 insert g 改成MixedDMLOps(g)即可。

4 附2:java操作sf对象

分享下以前写的java操作sf对象的博文。见http://www.cnblogs.com/csophys/archive/2013/03/08/2950419.html

Footnotes:

1 http://www.alloyteam.com/2012/08/lightweight-solution-for-an-iframe-cross-domain-communication/

2 http://biqing.alloyteam.com/lab/messenger/messenger.js

3 http://www.alloyteam.com/wp-content/uploads/2012/08/parent.html

4 https://github.com/biqing/MessengerJS

5 http://justcoding.iteye.com/blog/1366102

6 http://www.ibm.com/developerworks/cn/web/wa-aj-jsonp1/

7 http://www.open-open.com/lib/view/open1334026513327.html

8 http://www.tgerm.com/2012/04/mixeddmloperation-dml-operation-on.html

Date: 2013-06-08 15:20:41 中国标准时间

Author: csophys

Org version 7.8.11 with Emacs version 24

Validate XHTML 1.0

推荐阅读
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • Java Web开发中的JSP:三大指令、九大隐式对象与动作标签详解
    在Java Web开发中,JSP(Java Server Pages)是一种重要的技术,用于构建动态网页。本文详细介绍了JSP的三大指令、九大隐式对象以及动作标签。三大指令包括页面指令、包含指令和标签库指令,它们分别用于设置页面属性、引入其他文件和定义自定义标签。九大隐式对象则涵盖了请求、响应、会话、应用上下文等关键组件,为开发者提供了便捷的操作接口。动作标签则通过预定义的动作来简化页面逻辑,提高开发效率。这些内容对于理解和掌握JSP技术具有重要意义。 ... [详细]
  • 在Ubuntu 20.04 Linux系统中部署Git的详细步骤与最佳实践
    在Ubuntu 20.04 Linux系统中部署Git时,首先确保您的操作系统版本正确,并已以具备sudo权限的用户身份登录。推荐使用APT软件包管理器进行安装,这是最简便且可靠的方法。此外,遵循最佳实践,如定期更新Git版本和配置全局设置,可以进一步提升使用体验和安全性。 ... [详细]
  • Java集合框架特性详解与开发实践笔记
    Java集合框架特性详解与开发实践笔记 ... [详细]
  • 在基于.NET框架的分层架构实践中,为了实现各层之间的松散耦合,本文详细探讨了依赖注入(DI)和控制反转(IoC)容器的设计与实现。通过合理的依赖管理和对象创建,确保了各层之间的单向调用关系,从而提高了系统的可维护性和扩展性。此外,文章还介绍了几种常见的IoC容器实现方式及其应用场景,为开发者提供了实用的参考。 ... [详细]
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • 智能制造数据综合分析与应用解决方案
    在智能制造领域,生产数据通过先进的采集设备收集,并利用时序数据库或关系型数据库进行高效存储。这些数据经过处理后,通过可视化数据大屏呈现,为生产车间、生产控制中心以及管理层提供实时、精准的信息支持,助力不同应用场景下的决策优化和效率提升。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 本文深入探讨了数据库性能优化与管理策略,通过实例分析和理论研究,详细阐述了如何有效提升数据库系统的响应速度和处理能力。文章首先介绍了数据库性能优化的基本原则和常用技术,包括索引优化、查询优化和存储管理等。接着,结合实际应用场景,讨论了如何利用容器化技术(如Docker)来部署和管理数据库,以提高系统的可扩展性和稳定性。最后,文章还提供了具体的配置示例和最佳实践,帮助读者在实际工作中更好地应用这些策略。 ... [详细]
  • 题目描述:小K不幸被LL邪教洗脑,洗脑程度之深使他决定彻底脱离这个邪教。在最终离开前,他计划再进行一次亚瑟王游戏。作为最后一战,他希望这次游戏能够尽善尽美。众所周知,亚瑟王游戏的结果很大程度上取决于运气,但通过合理的策略和算法优化,可以提高获胜的概率。本文将详细解析洛谷P3239 [HNOI2015] 亚瑟王问题,并提供具体的算法实现方法,帮助读者更好地理解和应用相关技术。 ... [详细]
  • Java队列机制深度解析与应用指南
    Java队列机制在并发编程中扮演着重要角色。本文深入解析了Java队列的各种实现类及其应用场景,包括`LinkedList`、`ArrayBlockingQueue`和`PriorityQueue`等,并探讨了它们在高并发环境下的性能表现和适用场景。通过详细分析这些队列的内部机制和使用技巧,帮助开发者更好地理解和应用Java队列,提升系统的设计和架构能力。 ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • 在幼儿园中,有 \( n \) 个小朋友需要通过投票来决定是否午睡。尽管这个问题对每个孩子来说并不是特别重要,但他们仍然希望通过谦让的方式达成一致。每个人都有自己的偏好,但为了集体和谐,他们决定采用一种最小割的方法来解决这一问题。这种方法不仅能够确保每个人的意愿得到尽可能多的尊重,还能找到一个最优的解决方案,使整体满意度最大化。 ... [详细]
author-avatar
o0大大脸么么小小鱼0o
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有