Javascript参考错误,但在我使用书签

时间:2017-12-30 03:44:27

标签: javascript applescript referenceerror

我试图在已经完全加载的页面上执行一些Javascript。

为了测试javascript,我创建了一个bookmarklet,在页面加载时点击它,并且它正确执行:

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 个答案:

答案 0 :(得分:0)

变量array是在脚本执行后的某个时间点创建的,因为您不知道何时可以重试,直到它存在:

&#13;
&#13;
(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
)
&#13;
&#13;
&#13;

答案 1 :(得分:0)

不幸的是,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

希望这有帮助