【问题标题】:Safari extension - why can't I call a page's function? It works from the consoleSafari 扩展 - 为什么我不能调用页面的功能?它从控制台工作
【发布时间】:2018-07-26 10:29:47
【问题描述】:

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

当我尝试这个时,我只是返回“找不到变量:reorganizeData”

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

我 100% 确定页面已完全加载。我什至尝试过延迟 10 秒。

【问题讨论】:

  • 我感觉这将是Same-Origin Policy 的一个问题,您可能对此无能为力。控制台并不是真正的公平测试,也不具有代表性。
  • @phuzi - 你真的认为这可能是一个 S-O P 问题吗?我认为这更多的是关于 ajax 调用。从 CDN 加载 jQuery 时它是如何工作的?也许这只是一种方式?
  • 我以我能想到的最蹩脚的方式绕过它。我注入了一个带有图像“onload”中附加代码的图像

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


【解决方案1】:

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

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

例子:

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

【讨论】:

    猜你喜欢
    • 2021-02-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2022-01-09
    • 2015-03-09
    相关资源
    最近更新 更多