gpt4 book ai didi

javascript - 如何使用 javascript 和 applescript 替换网页上的文本

转载 作者:行者123 更新时间:2023-12-03 06:20:08 25 4
gpt4 key购买 nike

下面的 JavaScript 代码来自对此 question 的回答并且非常适合替换网页上的文本。在 Safari 和 Chrome 中使用 javascript 控制台都取得了成功的结果。

function replaceTextOnPage(from, to){
getAllTextNodes().forEach(function(node){
node.nodeValue = node.nodeValue.replace(new RegExp(quote(from), 'g'), to);
});

function getAllTextNodes(){
var result = [];

(function scanSubTree(node){
if(node.childNodes.length)
for(var i = 0; i < node.childNodes.length; i++)
scanSubTree(node.childNodes[i]);
else if(node.nodeType == Node.TEXT_NODE)
result.push(node);
})(document);

return result;
}

function quote(str){
return (str+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
}
}

replaceTextOnPage('oldtext', 'newtext');

但是,当我将其保存为 replace_text.js 并尝试使用 Applescript 运行它时,在 Safari 和 Chrome 中,它都会返回缺失值

tell application "Safari"
activate
tell the current tab of window 1 to do JavaScript "/Users/Me/ScriptFolder/replace_text.js"
end tell

我还尝试在转义引号和转义后直接从脚本编辑器中的tell block 运行javascript,而不是使用replace_text.js文件,但这也会导致缺失值

当我将 javascript 代码直接复制并粘贴到脚本编辑器中并尝试使用 javascript 运行器运行它时,我收到错误 -2700:脚本错误。

Error on line 15: ReferenceError: Can't find variable: document

如果我将脚本中的文档定义为 document = "http://example.com" 我会收到错误:

Error on line 12: TypeError: undefined is not an object (evaluating 'node.childNodes.length')

有人可以告诉我我做错了什么吗?如何使用 Applescript 运行相同的 javascript 代码?

谢谢

最佳答案

do JavaScript 命令需要一个包含 JavaScript 代码的字符串,而不是文件路径。

所以,你可以使用:

set myJS to read "/Users/Me/ScriptFolder/replace_text.js" as «class utf8» -- encoding of the file is "utf-8"
tell application "Safari"
tell the current tab of window 1 to do JavaScript myJS
end tell
<小时/>

或者这个:

set myJS to "function replaceTextOnPage(from, to){
getAllTextNodes().forEach(function(node){
node.nodeValue = node.nodeValue.replace(new RegExp(quote(from), 'g'), to);
});
return 'replaceTextOnPage(), Done' // just for testing, to avoid the missing value from the do JavaScript command
function getAllTextNodes(){
var result = [];
(function scanSubTree(node){
if(node.childNodes.length)
for(var i = 0; i < node.childNodes.length; i++)
scanSubTree(node.childNodes[i]);
else if(node.nodeType == Node.TEXT_NODE)
result.push(node);
})(document);
return result;
}
function quote(str){
return (str+'').replace(/([.?*+^$[\\]\\(){}|-])/g, \"\\$1\");
}
}
replaceTextOnPage('oldtext', 'newtext');"

tell application "Safari"
activate
tell the current tab of window 1 to do JavaScript myJS
end tell
<小时/>

当函数不返回任何内容(replaceTextOnPage 函数不返回任何内容)时,do JavaScript 命令返回缺失值,这是正常行为。

关于javascript - 如何使用 javascript 和 applescript 替换网页上的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38910832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com