这两天项目遇到这种需求。项目是一个平台级系统,其中嵌入了多款应用。在平台上可以使用这些应用操作业务。
现在产品提出了个需求:即在A应用中需要调用js方法来打开B应用。
处理方法是:平台js中给出个打开B应用的方法,由应用A调用这个方法。
1、平台有个公用的js,在js中添加一条语句:
document.domain = "testxxx.com";
然后添加一个js方法,如:
function openB(){ //do sthing.....}
2、A应用需要做的事情:
1、添加js:
document.domain = "testxxx.com";
2、在需要调用的位置上调用平台的openB方法来打开B应用:parent.window.openB();
注意:平台与应用之间设置的document.domain需要一样,并且平台及应用的域名都要有相同的二级域名,否则应用是调用不了平台的方法的。
----------------------------------------分割线----------------------------------------------
然而,以上虽然满足了需求,但方式并不是最好的。
更简单也更为方便的方法是:平台暴露一个js,若其他应用要想操作平台暴露的js方法,则只需要引用平台的js文件,然后调用平台的js方法。
现在的处理方式是:平台写个js文件,如open.js:
2 var open = {
3 /*打开应用的方法*/
4 openAPP:function(B){
5 //do sth...
parent.window.openAPP();
//具体的方法可以写在平台公用的js文件中,这里直接引用。这样可减少暴露的细节处理
6 },
7 /*其他的方法*/
8
9 };
应用A的操作是:
1、引用平台的open.js文件
2、调用open.js的方法:open.openAPP(B);
由此可以看出:后一种方法对于应用A来说操作更方便,只需引入js文件,调用里面的方法即可。
在开发的过程中,当发觉调用稍微有点麻烦时,或者代码复制粘贴超过几处了,就要考虑是否可以封装成更好的方式。