如何使用 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.
我正在尝试使用 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.