设定TT和KB为不同的域
1、TT set-ticket-type.html页面div中装iframe(指向KB页面
documentDisplay.jsp)
<
div
id
=
"tt-type-kb"
style
="
display
:
none
"
>
<
iframe
name
=
"tt-type-kb-display"
src
=
"/CS/cs/kb/query/documentDisplay.jsp?multiselect=true&crossPage=true&PERMIT_CHANNEL=2&routeSrc=troubleticket"
width
=
"100%"
height
=
"500px"
>
iframe
>
div
>
$.openPopupDiv(
'tt-type-kb'
,
'Knowledge Base'
,
'1024'
,
'545'
,
{
"onConfirm"
:
"ticketType.closePopupDivForKBPage()"
,
"draggable"
:
true
,
"resizable"
:
true
});
2、nginx配置反向代理
#设置知识库的菜单代理
location /CS {
#设置主机头和客户端真实地址,以便服务器获取客户端真实IP
proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#禁用缓存
proxy_buffering off;
#设置反向代理的地址
proxy_pass http://xxxx.xxxx.xxx.xx:0000/CS;
}
只有配置反向代理,tt才能访问kb页面的方法:
window.frames[
"tt-type-kb-display"
].submitSelected();
submitSelected()为kb的方法,包含下面的逻辑(获取数据,传参)
3、KB页面操作结束时创建一个Iframe,指向TT的页面,将数据作为参数发送到TT页面kbCallback.html
var
list =
new
Array();
var
obj =
new
Object();
obj.documentId = docTable.getValue(rows[i],
"DOCUMENT_ID"
);
obj.documentName = docTable.getValue(rows[i],
"DOCUMENT_NAME"
);
list.push(obj);
var
ff = document.createElement(
"iframe"
);
ff.style.visable =
"hidden"
;
ff.style.display=
'none'
;
ff.src=
"/ARIESRES/crm-bj/trouble-ticket/ticket-type/kbCallback.html?kbId="
+JSON.stringify(list);
document.body.appendChild(ff);
4、在kbCallback.html页面获取KB传过来的值,再传给set-ticket-type.js
DOCTYPE
html>//文档头,在ie8需要强制使用标准渲染模式才能使用json
<
html
>
<
body
>
body
>
html
>
<
script
>
window.onload =
function
(){
var
url = location.search;
var
str =
""
;
if
(url.indexOf(
"?"
) != -1) {
str = url.substr(url.indexOf(
"="
)+1);
str = decodeURIComponent(str);
}
var
param = JSON.parse(str);
parent.parent.ticketType.doAfterActionForKBPage(param);
}
script
>
注意1:
kbCallback.html的parent是documentDisplay.jsp,documentDisplay.jsp的parent是set-ticket-type.html,所以用parent.parent.function
注意2:
kbCallback.html
是个空页面,作为桥梁使用