Safari扩展 - 为什么我无法调用页面的功能?它可以从控制台

时间:2018-02-15 15:45:51

标签: javascript safari-extension safari-web-inspector

我有一个Safari扩展程序,可以在页面的左上角添加一个按钮。而我想要它做的就是调用我按下那个按钮时在原始页面中定义的javascript函数。

当我尝试这个时,我只是回过头来#34;找不到变量:reorganizeData"

但是,如果我从控制台调用reorganizeData(),它就能完美运行。

我100%确定页面已满载。我甚至尝试过10秒的延迟。

1 个答案:

答案 0 :(得分:1)

您的扩展程序的注入脚本由Safari隐式命名,以保护它免受文档命名空间的影响(反之亦然)。这就是注入的脚本无法调用文档中声明的函数的原因。

要解决此问题,您注入的脚本可以在文档中插入<script>标记。您可以让插入的脚本为您的按钮添加click事件处理程序,这将调用所需的函数。

示例:

var myScript = document.createElement('script');
myScript.textContent = `
    document.getElementById('my-button')
      .addEventListener('click', functionIWantToCall);
`;
document.body.appendChild(myScript);