messageInteraction.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. //实现与后台和流程图部分的交互
  2. if (window.location.href.indexOf("backEndAddressServiceWrapper") >= 0) {
  3. throw "serviceGrid"; //如果是服务器网页页面,则不执行工具
  4. }
  5. startMsg = { "type": 0, msg: "" };
  6. chrome.runtime.sendMessage(startMsg, function(response) {
  7. console.log(response.msg);
  8. }); //每次打开新页面的时候需要告诉后台
  9. console.log("test");
  10. chrome.extension.onMessage.addListener(
  11. function(request, sender, sendResponse) {
  12. if (request["type"] == 1);
  13. sendResponse("回答处理结果");
  14. }
  15. );
  16. function input(value) {
  17. let message = {
  18. "type": "InputText",
  19. "history": history.length, //记录history的长度
  20. "tabIndex": -1,
  21. "xpath": readXPath(nodeList[0]["node"], 0),
  22. "alternativeXPaths": [],
  23. "value": value,
  24. };
  25. let msg = { "type": 3, msg: message };
  26. chrome.runtime.sendMessage(msg);
  27. msg = { "type": 2, msg: value };
  28. chrome.runtime.sendMessage(msg);
  29. }
  30. //点击元素操作
  31. function sendSingleClick() {
  32. let message = {
  33. "type": "singleClick",
  34. "history": history.length, //记录history的长度
  35. "tabIndex": -1,
  36. "useLoop": false, //是否使用循环内元素
  37. "xpath": readXPath(nodeList[0]["node"], 0),
  38. };
  39. let msg = { "type": 3, msg: message };
  40. chrome.runtime.sendMessage(msg);
  41. }
  42. //采集单个元素
  43. function collectSingle() {
  44. let message = {
  45. "type": "singleCollect",
  46. "history": history.length, //记录history的长度
  47. "tabIndex": -1,
  48. "parameters": outputParameters,
  49. };
  50. let msg = { "type": 3, msg: message };
  51. chrome.runtime.sendMessage(msg);
  52. }
  53. //采集无规律多元素
  54. function collectMultiNoPattern() {
  55. let message = {
  56. "type": "multiCollectNoPattern",
  57. "history": history.length, //记录history的长度
  58. "tabIndex": -1,
  59. "parameters": outputParameters,
  60. };
  61. let msg = { "type": 3, msg: message };
  62. chrome.runtime.sendMessage(msg);
  63. }
  64. //采集有规律多元素
  65. function collectMultiWithPattern() {
  66. //先点击选择全部然后再
  67. let message = {
  68. "type": "multiCollectWithPattern",
  69. "history": history.length, //记录history的长度
  70. "tabIndex": -1,
  71. "loopType": 1,
  72. "xpath": "", //默认值设置为空
  73. "isDescendents": app._data.selectedDescendents, //标记是否采集的是子元素
  74. "parameters": outputParameters,
  75. };
  76. if (!detectAllSelected()) //如果不是全部选中的话
  77. {
  78. message.loopType = 2; //固定元素列表
  79. }
  80. if (message.loopType == 1) {
  81. message["xpath"] = app._data.nowPath;
  82. } else { //固定元素列表
  83. message["pathList"] = [];
  84. for (let i = 0; i < nodeList.length; i++) {
  85. message["pathList"].push(readXPath(nodeList[i]["node"], 0));
  86. }
  87. }
  88. let msg = { "type": 3, msg: message };
  89. chrome.runtime.sendMessage(msg);
  90. }
  91. //循环点击单个元素
  92. function sendLoopClickSingle(name) {
  93. let message = {
  94. "type": "loopClickSingle",
  95. "history": history.length, //记录history的长度
  96. "tabIndex": -1,
  97. "useLoop": true, //是否使用循环内元素
  98. "xpath": readXPath(nodeList[0]["node"], 0),
  99. "loopType": 0, //循环类型,0为单个元素
  100. "nextPage": false, //是否循环点击下一页
  101. };
  102. if (name == "Elements in next page") {
  103. message.nextPage = true;
  104. }
  105. let msg = { "type": 3, msg: message };
  106. chrome.runtime.sendMessage(msg);
  107. }
  108. //循环点击每个元素
  109. function sendLoopClickEvery() {
  110. let message = {
  111. "type": "loopClickEvery",
  112. "history": history.length, //记录history的长度
  113. "tabIndex": -1,
  114. "xpath": "", //默认值设置为空
  115. "useLoop": true, //是否使用循环内元素
  116. "loopType": 1, //循环类型,1为不固定元素列表
  117. };
  118. if (!detectAllSelected()) //如果不是全部选中的话
  119. {
  120. message.loopType = 2; //固定元素列表
  121. }
  122. if (message.loopType == 1) {
  123. message["xpath"] = app._data.nowPath;
  124. } else { //固定元素列表
  125. //有的网站像淘宝,每个元素都有一个独一无二的ID号,这时候就不适用用id进行xpath定位了,这个问题暂时搁置
  126. message["pathList"] = [];
  127. for (let i = 0; i < nodeList.length; i++) {
  128. message["pathList"].push(readXPath(nodeList[i]["node"], 0));
  129. }
  130. }
  131. let msg = { "type": 3, msg: message };
  132. chrome.runtime.sendMessage(msg);
  133. }
  134. //检测是否xpath对应的元素被全选了,个数判断即可
  135. function detectAllSelected() {
  136. if (app._data.nowPath == "") {
  137. return false;
  138. } else {
  139. let num = 0;
  140. let result = document.evaluate(app._data.nowPath, document, null, XPathResult.ANY_TYPE, null);
  141. var node = result.iterateNext(); //枚举第一个元素
  142. while (node) {
  143. // console.log(node.innerHTML);
  144. num++;
  145. node = result.iterateNext();
  146. }
  147. if (num == nodeList.length) {
  148. return true;
  149. } else {
  150. return false;
  151. }
  152. }
  153. }