CINXE.COM
反馈建议
<!DOCTYPE html> <html lang="en"> <head> <title>反馈建议</title> <meta charset="UTF-8"> <link href="https://bak.res.qq.com/nav/qb/favicon.ico" rel="shortcut icon"> <script src="https://stdl.qq.com/stdl/qqbrowser/lib/jsencrypt.min.js" charset="UTF-8"></script> <script src="https://stdl.qq.com/stdl/qqbrowser/lib/jquery-1.7.2.js" charset="UTF-8"></script> <script src="https://res.browser.qq.com/pcqb/homepage/lib/generate-id.js"></script> <script> // DCL反馈帮小忙levelId const defaultLevelId = { windows:"161ac6a9-f794-e92b-52ac-4b3766af02cd", mac:"66e3def4-3dcd-36c9-f097-c3b9710e33a9" } // DCL反馈封禁网页levelId const interceptedUrlId = { windows: "8caf2029-3dc9-c2af-adc4-779c20ae2c1a", mac: "89e68726-1ff1-d62f-75cb-11af7d69a35f" } // DCL反馈AI小助手levelID const aiAssistantId = { windows: '93db6c48-8231-0e38-d525-348608d1952d', mac: '616216fb-ec10-5927-7684-5a258883200a', }; // DCL反馈文档助手的levelID const docId = { windows: '2fb25b4d-33f0-9e3e-cd50-c11acb4a2d6a', mac: '', }; // DCL反馈PPT文档相关levelID const pptDocumentId = { windows: '6a245fbe-4345-5ad5-05d7-5f837d268b1d', mac: '', }; // DCL返回exce相关的levelId const excelDocumentId = { windows: 'e39f89e4-fe45-d384-6975-3812a1debf0a', mac: '', }; // 获取URL上的参数 function getUrlQuery (param) { const url = window.location.search.substr(1); const reg = new RegExp('(^|&)' + param + '=([^&]*)(&|$)'); const res = url.match(reg); const value = res && res[2] && decodeURI(res[2]) || ''; if (value && (/^[a-zA-Z0-9_\-]+$/.test(value) || /^http/.test(value))) { return value; } return undefined; }; let isMac = /Macintosh/i.test(navigator.userAgent); let custom = JSON.stringify({ mediaId: getUrlQuery('mediaId') || '', sessionId: getUrlQuery('sessionId') || '', chatId: getUrlQuery('chatId') || '', }); let levelId = ''; const level = getUrlQuery('level') || ''; if (level === "qbtool") { levelId = isMac === true ? defaultLevelId.mac : defaultLevelId.windows }; if (level === "intercept") { levelId = isMac === true ? interceptedUrlId.mac : interceptedUrlId.windows }; if (level === 'ai_assistant') { levelId = isMac === true ? aiAssistantId.mac : aiAssistantId.windows; } if (level === 'doc') { levelId = isMac === true ? docId.mac : docId.windows; } if (level === 'ppt') { levelId = isMac === true ? pptDocumentId.mac : pptDocumentId.windows; } if (level === 'excel') { levelId = isMac === true ? excelDocumentId.mac : excelDocumentId.windows; } if (isMac === true) { location.href = `https://feedback.browser.qq.com/macqb?levelId=${levelId}&custom=${custom}&intercept=${getUrlQuery('url')? decodeURIComponent(getUrlQuery('url')) : ''}`; } const isSogou = /MetaSr/i.test(navigator.userAgent); // 如果是在搜狗浏览器下打开这个页面,直接跳转到搜狗的反馈页面。 if (isSogou) { window.location.href = `https://feedback.browser.qq.com/sogoubrowser`; } </script> <style> body { background-color: #f9fafb; font-family: PingFangSC-Regular; margin: 0; padding: 0 } .loading-container { position: fixed; width: 100%; height: 100%; z-index: 50; top: 0; background-color: #eee; } .banner { background-color: #ecf2ff; border-radius: 16px; margin: 24px 24px 0; overflow: hidden; text-align: center } .banner img { height: 158px; max-width: 980px } .tabs-box { background-color: #f9fafb; margin: 0 24px; padding: 32px 0 16px; position: sticky; top: 0; z-index: 10 } .tabs-box .tabs { color: #666; cursor: pointer; font-size: 16px; line-height: 24px; margin: 0 auto; position: relative; text-align: left; width: 994px; z-index: 1 } .tabs-box .tabs .submit { margin-right: 24px } .tabs-box .tabs a { display: inline-block } .tabs-box .tabs a[data-active=true] { color: #242424; font-weight: 700; position: relative } .tabs-box .tabs a[data-active=true]:after { background-color: #3070f0; bottom: 0; content: ""; height: 2px; left: 50%; position: absolute; transform: translate(-50%, 100%); width: 30px } .content-box { margin: 0 24px; position: relative } .content-box[data-tab=submit] .submit { display: flex } .content-box[data-tab=history] .submit, .content-box[data-tab=submit] .history { display: none } .content-box[data-tab=history] .history { display: flex } .content-box .content { box-sizing: border-box; display: flex; justify-content: space-between; margin: 0 auto } .content-box .content.submit { width: 994px } .content-box .content.history { border-radius: 8px; overflow: hidden; width: 994px } .content-box .content .main { border-radius: 8px; overflow: hidden; width: 564px } .content-box .content .faq { padding-top: 68px; width: 399px } .content-box .content .faq .faq-title { color: #242424; font-size: 16px; line-height: 24px; padding-bottom: 12px } .content-box .content .faq .faq-split-line { background-color: rgba(0, 0, 0, .04); height: 1px } .content-box .content .faq p { cursor: pointer; font-size: 14px; height: auto; line-height: 24px; margin-bottom: 0; margin-top: 12px; padding-right: 16px; position: relative; text-align: left } .content-box .content .faq p:first-child { margin-top: 0 } .content-box .content .faq p:after { background-image: url(https://m4.publicimg.browser.qq.com/publicimg/pcqb/feedback/feedback-faq-icon.png); background-repeat: no-repeat; background-size: cover; content: ""; height: 12px; position: absolute; right: 0; top: 50%; transform: translateY(-50%); width: 12px } .content-box .content .faq p a { color: rgba(0, 0, 0, .86); font-size: 14px; line-height: 24px; text-decoration: none } .content-box .content .faq .hot-faq-list::-webkit-scrollbar { height: 4px; width: 4px } .content-box .content .faq .hot-faq-list::-webkit-scrollbar-thumb { background-color: rgba(0, 0, 0, .08) } .content-box .content .faq .category-faq-list { padding-right: 8px } .content-box .content .faq .category-faq-list::-webkit-scrollbar { height: 4px; width: 4px } .content-box .content .faq .category-faq-list::-webkit-scrollbar-thumb { background-color: rgba(0, 0, 0, .08) } .content-box .content .faq .hot-faq-list-inner { margin-top: 16px } .content-box .content .faq .category-faq-list-inner { margin-top: 4px } .content-box .content .faq .category-faq { display: none; margin-top: 24px } .content-box .content .faq .category-faq .faq-category-tab-container { display: flex; flex-wrap: wrap; margin-top: 18px } .content-box .content .faq .category-faq .faq-category-tab-container .faq-category-tab-item { background-color: rgba(3, 23, 77, .04); border-radius: 8px; color: rgba(0, 0, 0, .86); cursor: pointer; font-size: 12px; line-height: 24px; margin-bottom: 12px; margin-right: 8px; padding: 0 12px } .content-box .content .faq .category-faq .faq-category-tab-container .faq-category-tab-item.active { background-color: #3070f0; color: #fff } .iframe-container-history { overflow-x: hidden; width: 100% } .iframe-container-history iframe { width: 100% } .iframe-container-submit { overflow-x: hidden } .iframe-container-submit iframe { width: 100% } .qrcode-box { background-color: rgba(0, 0, 0, .04); background-image: url(https://m4.publicimg.browser.qq.com/publicimg/pcqb/feedback/qrcode.png); background-position: 50%; background-repeat: no-repeat; background-size: 100%; border-radius: 8px; cursor: pointer; height: 37px; left: 564px; position: relative; position: absolute; top: 50%; transform: translate(-100%, -50%); width: 114px } .qrcode-box:hover .qrcode-container { display: block } .qrcode-box .qrcode-container { border-radius: 8px; bottom: 0; box-shadow: 0 14px 28px 0 rgba(0, 0, 0, .16); display: none; overflow: hidden; position: absolute; right: 0; transform: translateY(calc(100% + 8px)); width: 250px } .qrcode-box .qrcode-container img { width: 100% } </style> </head> <body> <div class="loading-container"></div> <div class="banner"> <img src="https://m4.publicimg.browser.qq.com/publicimg/pcqb/feedback/feedback-banner.png" alt=""> </div> <div class="tabs-box"> <div class="tabs"> <a class="submit" data-active="true">我要反馈</a> <a class="history" data-active="false">反馈历史</a> <div class="qrcode-box"> <div class="qrcode-container"> <img src="https://m4.publicimg.browser.qq.com/publicimg/pcqb/feedback/pcqb_feedback_qrcode.jpg" /> </div> </div> </div> </div> <div class="content-box" data-tab="submit"> <!-- 提交反馈 --> <div class="content submit"> <div class="main"> <div class="iframe-container-submit"> <iframe frameborder="0" height="941px" id="iframe-submit"></iframe> </div> </div> <div class="faq"> <div class="hot-faq"> <div class="faq-title">常见问题</div> <div class="faq-split-line"></div> <div class="hot-faq-list"> <div class="hot-faq-list-inner"></div> </div> </div> <div class="category-faq"> <div class="faq-title">问题分类</div> <div class="faq-split-line"></div> <div class="faq-category-tab-container"></div> <div class="category-faq-list"> <div class="category-faq-list-inner"></div> </div> </div> </div> </div> <!-- 反馈历史 --> <div class="content history"> <div class="iframe-container-history"> <iframe frameborder="0" height="877px" id="iframe-history"></iframe> </div> </div> </div> </body> <script> const doc = document; const win = window; const head = doc.head || doc.getElementsByTagName("head")[0]; const baseElement = head.getElementsByTagName("base")[0]; const iframeSubmitEl = document.querySelector('#iframe-submit'); const iframeHistoryEl = document.querySelector('#iframe-history'); const contentBoxEl = document.querySelector('.content-box'); const requirejs = function (urls, callback, errorCallback) { if (urls.length === 0) { return isFunction(callback) && callback(); } let url = urls.shift(), node = doc.createElement("script"); node.charset = 'utf-8'; if ("onload" in node) { // node.onload = node.onerror = onload; node.onload = onload; node.onerror = errorCallback } else { node.onreadystatechange = function () { if (/loaded|complete/.test(node.readyState)) { onload(); } } } function onload() { win.console && console.log('> script loaded: ', node.src); // Ensure only run once and handle memory leak in IE node.onload = node.onerror = node.onreadystatechange = null; // Remove the script to reduce memory leak // head.removeChild(node); // Dereference the node node = null; if (urls.length) { requirejs(urls, callback); } else { // console.log('scripts load finish!'); isFunction(callback) && callback(); } } node.async = "async"; node.src = url; // ref: #185 & http://dev.jquery.com/ticket/2709 baseElement ? head.insertBefore(node, baseElement) : head.appendChild(node); }; //requirejs const isFunction = function (obj) { return Object.prototype.toString.call(obj) === "[object Function]"; } // 初始化tab点击 const initTab = () => { const submitEl = document.querySelector('.tabs .submit'); const historyEl = document.querySelector('.tabs .history'); submitEl.addEventListener('click', () => { submitEl.setAttribute('data-active', 'true'); historyEl.setAttribute('data-active', 'false'); initMain('submit'); }); historyEl.addEventListener('click', () => { historyEl.setAttribute('data-active', 'true'); submitEl.setAttribute('data-active', 'false'); initMain('history'); }); }; initTab(); // 生成faq列表的html const gererateBaseFaqList = (list) => { const tempEl = document.createElement('div'); // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < list.length; i++) { const pEl = document.createElement('p'); pEl.innerHTML = `<a href="./faq.html?faqid=${list[i].faqId}" target="_blank">${i + 1}. ${list[i].faqSubject}</a>`; tempEl.appendChild(pEl); } return tempEl.innerHTML; }; const CATEGORY_MAP = {}; // 生成每一个faq分类下的列表 const setCategoryFaqList = (groupId) => { const list = CATEGORY_MAP[groupId]; if (list) { document.querySelector('.category-faq-list-inner').innerHTML = gererateBaseFaqList(list); return; } document.querySelector('.category-faq-list-inner').innerHTML = ''; const userInfo = `userid=3d45d4a7e8e205f08a1df1f0734a88cb&t=${Date.parse(new Date())}`; const encryptKey = encrypt.encrypt(userInfo); const url = `https://api.dcl.qq.com/faqs?appId=9cca3048e7&type=4&faqGroupId=${groupId}&data=${encryptKey}&t=${Date.now() - 1000 * 60 * 3}`; $.ajax({ url, headers: generateCustomHeader(), success: (data) => { const list = data.data.faqs || []; CATEGORY_MAP[groupId] = list; document.querySelector('.category-faq-list-inner').innerHTML = gererateBaseFaqList(list); } }); }; // 拼接faq分类的html const generateCategoryFaqList = (categoryList) => { document.querySelector('.category-faq').style.display = 'block'; // tab const tabList = categoryList.filter(v => v); const tabContainerEl = document.querySelector('.faq-category-tab-container'); tabList.forEach((tab, idx) => { const tabEl = document.createElement('div'); tabEl.classList.add('faq-category-tab-item'); if (idx === 0) { tabEl.classList.add('active'); } tabEl.setAttribute('data-category', tab.groupId); tabEl.innerHTML = tab.groupSubject; tabContainerEl.appendChild(tabEl); // 绑定切换tab事件 tabEl.addEventListener('click', (e) => { document.querySelectorAll('.faq-category-tab-item').forEach((el) => { el.classList.remove('active'); }); e.currentTarget.classList.add('active'); const id = e.currentTarget.getAttribute('data-category'); setCategoryFaqList(id); }); }); setCategoryFaqList(tabList[0].groupId); }; // 生成常见faq的html const generateHotFaqList = (list) => { const listContainerEl = document.querySelector('.hot-faq-list-inner'); listContainerEl.innerHTML = gererateBaseFaqList(list); }; // 初始化反馈提交区域内容 const initMain = (tab) => { if (tab === 'submit') { iframeSubmitEl.src = iframSrc; contentBoxEl.setAttribute('data-tab', 'submit'); } else { iframeHistoryEl.src = iframHistorySrc; contentBoxEl.setAttribute('data-tab', 'history'); } }; // 登录监听 function listenLoginStatusChange (callback) { if (isQQBrowser()) { chrome.account && chrome.account.onLoginStatusChanged && chrome.account.onLoginStatusChanged.addListener(() => { window.location.reload(); }); } } // 监听到登录状态改变时,刷新页面 listenLoginStatusChange(); /** * 判断是否为QB浏览器 */ function isQQBrowser() { return !!( !/Trident/i.test(navigator.userAgent) && /QQBrowser/i.test(navigator.userAgent) && // chrome && window.external && window.external.getVersion ); } // 比较版本号 const compareVersion = (sVersioinA, sVersionB, format = 'xx.x.xxxx') => { const curVerStr = sVersioinA.replace(/\./g, ''); const verStr = sVersionB.replace(/\./g, ''); const res = []; const { length } = format.replace(/\./g, ''); for (let i = 0; i < length; i++) { const m = Number(curVerStr[i]) || 0; const n = Number(verStr[i]) || 0; if (m === n) { res[i] = 0; } else if (m > n) { res[i] = 1; } else { res[i] = -1; } } for (let i = 0; i < 7; i++) { if (res[i] !== 0) { return res[i]; } } return 0; }; // 显示客户端native的登录框 function showLoginWindow(_url) { var wrapper = $("#userLoginPop"); wrapper.show(); // 如果是大于等于12.6的版本,api传入参数 const version = (window.external && window.external.getVersion && window.external.getVersion()) || ''; if (compareVersion(version, '12.6.0000') >= 0) { // 吊起登录框增加来源上报 window.chrome && window.chrome.account && window.chrome.account.promptLogin && window.chrome.account.promptLogin(JSON.stringify({ triggerSrc: 45, }), () => { }); } else { window.chrome && window.chrome.account && window.chrome.account.promptLogin && window.chrome.account.promptLogin(res => { }); } } //添加cookie值 var setCookie = function (name, value, day) { if(day !== 0){ //当设置的时间等于0时,不设置expires属性,cookie在浏览器关闭后删除 var expires = day * 24 * 60 * 60 * 1000; var date = new Date(+new Date()+expires); document.cookie = name + "=" + escape(value) + ";expires=" + date.toUTCString(); }else{ document.cookie = name + "=" + escape(value); } }; // 获取cookie值 function getCookie(Name) { var search = Name + "="; var returnvalue = ""; if (document.cookie.length > 0) { var offset = document.cookie.indexOf(search); if (offset != -1) { offset += search.length; var end = document.cookie.indexOf(";", offset); if (end == -1){ end = document.cookie.length; } returnvalue = unescape(document.cookie.substring(offset, end)); } return returnvalue; } }; //解码 //十进制转二进制并返回竞品名称和安全软件名称 function ten2bin(number,obj){ let dec = number; let bin = ""; while(dec > 0){ if (dec%2 != 0) { bin = "1" + bin; }else{ bin = "0" + bin; } dec = parseInt(dec/2); } if(obj == 'ps'){ //TODO 安全软件 }else{ //TODO 竞品 } return bin; } // 检测浏览器是否登录 let $iframe = document.getElementById('frame_tips'); let $todo = document.querySelector('.tabs .submit'); let $history = document.querySelector('.tabs .history'); // 获取浏览器主版本号 function getBrowserMainVersion(){ var a = navigator.userAgent; let strs = new Array(); strs = a.split("/"); let version = strs[strs.length-1]; let versions = new Array(); versions = version.split("."); let qbversion = versions[0]; return qbversion; } let keyStr = '-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlAlASWJvw4bQFdS4OTkHOcZftLPvKwq9BALHjXec7TFyy4NSifMYukxs1GvYyOg8gjapn7LBoQsAhIWa/RInpE7sOZaqey0odLMTaGVltBukzbDvQBzxisXpkr6l1h/UDaoX9iHdvcsrgh64nl49QGeI5nSOOxIGA2lakbbHoXeFKWa6u0SyX6fX5pbrg+RDYENfmf1u0kfClrUNU/YaYLyaqduCHdVqUOmM1qtz8W0stx+9Kd2ymGnNAuX0BspYMA2hNy89wffHL6YS7roULMiUhYWa6km5tS41BbCy7A4UGJhYZveLfb+YpjxVFnIWBKGBkASlZ0FNSqg+wYWrhQIDAQAB-----END PUBLIC KEY-----'; let jsencrypt = "https://stdl.qq.com/stdl/qqbrowser/lib/jsencrypt.min.js"; let encrypt = new JSEncrypt(); encrypt.setPublicKey(keyStr); let iframSrc; // 提交反馈的iframe let iframHistorySrc; // 反馈历史的iframe let ptUin = getCookie('luin'); //检测网页是否正常登陆 // 最终要上报的消息 let systemConfig = { osInfo: '', qbVer: '', coreVersion:'', ieVer:'', guid:'', cbInfo:'', psInfo:'', tabInfo:'', clientGuid:'' } function generateCustomHeader() { return { 'X-Tone-RequestId': `${generateUniqueId({ length: 22 })}_${Math.floor(Date.now() / 1000)}`, Source: 'api', }; }; function getHotFaq(){ const userInfo = `userid=3d45d4a7e8e205f08a1df1f0734a88cb&t=${Date.parse(new Date())}`; const encryptKey = encrypt.encrypt(userInfo); let url = "https://api.dcl.qq.com/faqs?appId=9cca3048e7&type=3&data=" + encryptKey + '&t=' + (Date.now() - 1000 * 60 * 3); $.ajax({ url, headers: generateCustomHeader(), success: (data) => { const faqData = data.data.faqs || []; generateHotFaqList(faqData); } }); } // 获取问题分类 function getFaqCategory() { const userInfo = `userid=3d45d4a7e8e205f08a1df1f0734a88cb&t=${Date.parse(new Date())}`; const encryptKey = encrypt.encrypt(userInfo); const url = "https://api.dcl.qq.com/faq-groups?appId=9cca3048e7&type=3&data=" + encryptKey + '&t=' + (Date.now() - 1000 * 60 * 3); $.ajax({ url, headers: generateCustomHeader(), success: (data) => { const faqData = data.data.groups || []; generateCategoryFaqList(faqData); } }); } // 客户端的api const nativeApi = { // 获取用户登录信息 getLoginInfo: () => new Promise(resolve => chrome.account.getLoginInfo(resolve)), // 操作系统 getOsVersion: () => new Promise(resolve => chrome.environment.getOsVersion(resolve)), // QQ浏览器版本 getQbVersion: () => new Promise(resolve => chrome.environment.getQbVersion(resolve)), // 内核版本 getCoreVersion: () => new Promise(resolve => chrome.environment.getCoreVersion(resolve)), // IE浏览器版本 getIeVersion: () => new Promise(resolve => chrome.environment.getIeVersion(resolve)), // 安全软件 getProtectionSoftware: () => new Promise(resolve => chrome.environment.getProtectionSoftware(resolve)), // 竞品 getCoexistedBrowser: () => new Promise(resolve => chrome.environment.getCoexistedBrowser(resolve)), // 打开url getTabInfo: () => new Promise(resolve => chrome.environment.getTabInfo(resolve)), }; // 非QB内的逻辑 const initPageInNonQB = () => { requirejs(['https://res.browser.qq.com/pcqb/lib/uaparse.js'], function() { // 非QB下,直接模拟用户账号 let userid = ''; const lsKey = '_qb_home_page_user_id_'; if(localStorage.getItem(lsKey)) { userid = localStorage.getItem(lsKey); } else { userid = `aaaa${generateUniqueId({ length: 24 })}88cb`; localStorage.setItem(lsKey, userid); } const uaInfo = new UAParser(navigator.userAgent).getResult(); console.log('uaInfo', uaInfo); let version = uaInfo.browser.version; let os = uaInfo.os.name + '_' + uaInfo.os.version; let custom = { '是否是QB': '否', '内核版本': uaInfo.engine.version, '浏览器版本': uaInfo.browser.version, '浏览器': uaInfo.browser.name, 'ClientGuid': userid, '当前打开URL': encodeURIComponent(document.referrer) || '', 'user-agent': uaInfo.ua, 'mediaId': getUrlQuery('mediaId') || '', 'sessionId': getUrlQuery('sessionId') || '', 'chatId': getUrlQuery('chatId') || '', 'qbId': userid, 'Q36': '', 'qua': '', }; if(getUrlQuery('url')){ custom['拦截网址'] = decodeURIComponent(getUrlQuery('url')); }; let customData = JSON.stringify(custom); // 需要加密的账号 const userInfo = 'userid='+userid+'&version='+version + '&os='+ os +'&t=' + Date.now();; // 使用公钥加密,得到密文 const encryptKey = encrypt.encrypt(userInfo); iframSrc = 'https://h5.dcl.qq.com/pc/aisee/submit?appId=9cca3048e7&pid=1&data='+encryptKey +'&custom='+customData + '&t=' + Date.now() + `&levelId=${levelId}`; iframHistorySrc = 'https://h5.dcl.qq.com/pc/aisee/feedbacks?appId=9cca3048e7&pid=1&data='+encryptKey +'&custom='+customData + '&t=' + Date.now(); initMain('submit'); }); }; // QB内登录态 const initPageInQBWithLogin = () => { let version = window.external.getVersion(); Promise.all([ nativeApi.getLoginInfo(), nativeApi.getOsVersion(), nativeApi.getQbVersion(), nativeApi.getCoreVersion(), nativeApi.getIeVersion(), nativeApi.getProtectionSoftware(), nativeApi.getCoexistedBrowser(), nativeApi.getTabInfo(), ]).then(([loginInfo, osInfoData, qbVerData, v, ieVerData, psData, cbData, tabData]) => { console.log('[loginInfo]', loginInfo); let qbId = loginInfo.qbid; let userid = qbId; // QB票据有效 if(loginInfo.qbLoginInfo) { try { const qbloginInfo = JSON.parse(loginInfo.qbLoginInfo); console.log('[qbloginInfo]', qbloginInfo); qbId = qbloginInfo.qbid; userid = qbId; } catch(e) {} } systemConfig.guid = window.external.getGuid().replace(/\-/g, ''); systemConfig.osInfo += osInfoData; systemConfig.qbVer += qbVerData; systemConfig.coreVersion += v; systemConfig.ieVer += ieVerData; systemConfig.psInfo += ten2bin(psData,'ps'); systemConfig.cbInfo += ten2bin(cbData,'cb'); systemConfig.tabInfo += encodeURIComponent(tabData); console.log('[systemConfig]', systemConfig); if (Number(getBrowserMainVersion()) >= 10) { //ClientGuid systemConfig.clientGuid = qb_external.getFavSyncGuid(); } let custom = { '内核版本': systemConfig.coreVersion, 'IE浏览器版本': systemConfig.ieVer, '安全软件': systemConfig.psInfo, '竞品': systemConfig.cbInfo, 'ClientGuid': systemConfig.clientGuid, '当前打开URL': systemConfig.tabInfo, 'mediaId': getUrlQuery('mediaId') || '', 'sessionId': getUrlQuery('sessionId') || '', 'chatId': getUrlQuery('chatId') || '', 'qua': encodeURIComponent(qb_external.getQUA()), 'qbId': qbId, }; console.log('[customInfo]', custom); if(getUrlQuery('url')){ custom['拦截网址'] = decodeURIComponent(getUrlQuery('url')); }; if(window.qb_external && window.qb_external.getQ36){ custom['Q36'] = window.qb_external.getQ36(); }; let customData = JSON.stringify(custom); // 需要加密的账号 const userInfo = 'userid='+userid+'&version='+version+"&os="+ systemConfig.osInfo+"&deviceId="+systemConfig.clientGuid + '&t=' + Date.now(); // 使用公钥加密,得到密文 const encryptKey = encrypt.encrypt(userInfo); iframSrc = 'https://h5.dcl.qq.com/pc/aisee/submit?appId=9cca3048e7&pid=1&data='+encryptKey +'&custom='+customData + '&t=' + Date.now() + `&levelId=${levelId}`; iframHistorySrc = 'https://h5.dcl.qq.com/pc/aisee/feedbacks?appId=9cca3048e7&pid=1&data='+encryptKey +'&custom='+customData + '&t=' + Date.now(); initMain('submit'); }); }; function hideLoading() { document.querySelector('.loading-container').style.display = 'none'; } // 请求 我要反馈 和 反馈记录、常见问题的api接口并获取当前操作电脑的相关信息 function intPage() { if (isQQBrowser()) { chrome.account.getLoginInfo(res => { const isLogin = res.isLogin === true || res.qbLoginInfo; if (isLogin) { hideLoading(); initPageInQBWithLogin(); } else { $(".pc-qb-suggest").css('display', 'none'); showLoginWindow(); } }); } else { hideLoading(); initPageInNonQB(); } getHotFaq(); getFaqCategory(); } // 初始化页面 requirejs(['https://stdl.qq.com/stdl/qqbrowser/lib/jsencrypt.min.js'], function () { intPage(); }); </script> </html>