下面的javascript代码来自这个问题的答案,非常适合替换网页上的文本。在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');
但是,当我将其保存为替换_文本时。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
我也尝试运行javascript直接从Script编辑器中的告诉块,转义引号和转义后,而不是使用replace_text.js文件,但这也会导致丢失值。
当我将javascript代码直接复制并粘贴到脚本编辑器中,并尝试使用javascript运行程序运行它时,会出现错误-2700:Script Error。
第15行错误:引用错误:找不到变量:文档
如果我将脚本中的文档定义为document=”http://example.com“
我得到了一个错误:
第12行错误:TypeError:undefined不是对象(计算'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
当函数不返回任何内容时,do JavaScript
命令返回缺少的值(函数不返回任何内容时,replaceTextOnPage
命令返回缺少的值),这是正常行为。
要替换文本的元素:
我有一个文本文件,用户在这里写东西,我用这个文本框的javascript获得文本,并在段落中显示它。我有段落的文本限制,比如50个chrac。如果用户写了超过50个chrac我想显示(...)在45个chrac之后。是否可以使用JavaScript? 这是用户写的段落,它有50多个chrac。 Lorem ipsum dolor sit amet,consectetur adipisicing e
问题内容: 在讨论特定问题之前,我需要解释一些基本步骤。 首先,所涉及的应用程序处理客户在线约会的管理。 顾客填写完美容中心的护理表格并提供其信息后,将进入确认页面。 现在,此页面执行ajax请求以将约会存储在数据库中。 如果一切成功,将显示一个页面,其中包含约会的详细信息以及成功消息。 问题在于该页面当前仅显示在响应中,即在选项卡网络控制台浏览器中。 所以我的问题很简单: 即使在StackOve
我只想知道如何用另一个文件完全替换用户的主机文件?注意:我只想给用户我的. exe编译文件(附加我自己的主机文件),并且在运行exe文件后,用户的主机文件应替换为我自己的主机文件,我附加到我的exe文件。
我有一个文本字段,用户在其中写东西,我用javascript获取文本框的文本,并在段落中显示。我有文字限制的段落像50 chrac。如果用户编写的chrac超过50个,我想显示(…)45小时后,chrac。可以使用javascript吗? 像这样的段落是用户写的,它的50多个chrac。 Lorem ipsum dolor坐在那里,奉献给我们,我们的工作和伟大的礼物。在有限的条件下,在有限的条件下
问题内容: 我需要从OracleSQL中的employees表中显示Employee及其佣金金额,但是条件是如果它遇到值,我需要打印_“ No Commission”_ 。 在第一部分中,我写道: 但是我无法获得如何用 “ No Commission” 代替价值观。 问题答案: 您可以使用表达式: 或: 或: PS如果不是数据类型,则也应使用或。