我有一个 Safari 扩展程序,它在页面的左上角添加了一个按钮。我想要它做的就是在按下该按钮时调用在原始页面中定义的 javascript 函数。
当我尝试这个时,我只是返回“找不到变量:reorganizeData”
但是,如果我从控制台调用 reorganizeData() 它可以完美运行。
我 100% 确定页面已完全加载。我什至尝试过延迟 10 秒。
我有一个 Safari 扩展程序,它在页面的左上角添加了一个按钮。我想要它做的就是在按下该按钮时调用在原始页面中定义的 javascript 函数。
当我尝试这个时,我只是返回“找不到变量:reorganizeData”
但是,如果我从控制台调用 reorganizeData() 它可以完美运行。
我 100% 确定页面已完全加载。我什至尝试过延迟 10 秒。
Safari 为您的扩展注入脚本隐式命名空间,以保护它不受文档命名空间的影响(反之亦然)。这就是为什么注入的脚本不能调用文档中声明的函数。
为了解决这个问题,您注入的脚本可以<script>
在文档中插入一个标签。您可以让插入的脚本click
为您的按钮添加一个事件处理程序,该处理程序将调用所需的函数。
例子:
var myScript = document.createElement('script');
myScript.textContent = `
document.getElementById('my-button')
.addEventListener('click', functionIWantToCall);
`;
document.body.appendChild(myScript);