如何使用 chrome.devtools.inspectedWindow.eval 从执行的脚本中获取 return 值

How to return value from executed script with chrome.devtools.inspectedWindow.eval

我正在尝试使用 chrome.devtools.inspectedWindow.eval 从 devtool 面板在网页内执行一些脚本,代码工作正常但无法弄清楚如何 return 响应回调。感谢您的支持。

执行的脚本

const someScript = function () {
    alert("from panel")
    return 123
    // i can't return
}

开发工具

Chrome.devtools.inspectedWindow.eval(
//this regex convert function body to string
    someScript.toString().replace(/^function\s*\S+\s*\([^)]*\)\s*\{|\}$/g, ""),
       function (result, isException) {
           if (isException) {
               //exception always fire
               console.log("Result not received");
           } else {
               console.log("Selected element: " + result);
       }
});

脚本最后计算的表达式返回给回调。

假设函数 returns 有一个值(您的函数有),您只需添加一些括号即可将函数作为 IIFE 调用,无需提取函数体。

const someFunc = function () {
  return 123;
};

chrome.devtools.inspectedWindow.eval(`(${someFunc})()`, (res, err) => {
  if (err) {
    console.warn('Error', err);
  } else {
    console.log('Result', res);
  }
});

备注:

  • 仅支持 JSON 兼容类型(字符串、数字、布尔值、空值和由这些类型组成的 arrays/objects)。
  • 您的 devtools 面板有自己的控制台,您可以通过在面板内右键单击以显示上下文菜单并在此处选择“检查”来打开它。
  • 在 console.log 中使用逗号 , 而不是 + 因为后者不适用于 arrays/objects.