Javascript 引用错误,但在使用书签时有效
2017-12-30
225
我试图在已完全加载的页面上执行一些 Javascript。
为了测试 javascript,我创建了一个书签,在页面加载时单击它,它正确执行:
javascript:(array.find('value').__showAllRecords(event))
我想在我正在编写的 AppleScript 中使用此 Javascript,并将其发送到 chrome,但由于某种原因,我收到此错误:
Uncaught ReferenceError: array is not defined
at <anonymous>:1:1
它仅当我在 AppleScript 编辑器中运行脚本时发生,而不是在我使用书签时发生。这是我的 AppleScript 代码:
tell application "Google Chrome"
execute front window's active tab javascript "array.find('value').__showAllRecords(event)"
end tell
2个回答
变量
array
是在脚本执行后的某个时间点创建的,因为您不知道何时可以重试,直到它存在:
(function(){
function trySomething(){
try{
array.find('value').__showAllRecords(event);
console.log("worked, stop trying");
clearInterval(timer);
}catch(e){
console.log("didn't work, try again",e);
}
}
var timer = setInterval(trySomething,1000);
}())
//create the array object some time in the future (not actually an Array type)
//this is not part of your script but would be created by the page
//at some point
setTimeout(
()=>window.array={find:x=>({__showAllRecords:x=>x})}
,6000
)
HMR
2017-12-30
不幸的是,applescript 无法访问非默认全局变量。请参阅线程 https://bugs.chromium.org/p/chromium/issues/detail?id=543437
但有一个解决方法,您可以将数组设置为 div 的 innerHTML 并从 applescript 中检索值。因此,例如这是我的 div
<div id="test">[1,2,3]</div>
,您可以执行
tell application "Google Chrome"
execute front window's active tab javascript "console.log(document.getElementById(\"test\").innerHTML)"
end tell
希望这有帮助
cdoshi
2017-12-30