Javascript Safari扩展-为什么可以';我叫一个页面';s函数?它从控制台工作
我有一个safari扩展,它在页面的左上角添加了一个按钮。我想让它做的就是调用一个javascript函数,当我按下这个按钮时,这个函数在原始页面中定义 当我尝试这一点时,我只会返回“找不到变量:resorganizeData” 但是,如果我从控制台调用reorganizeData(),它可以完美地工作Javascript Safari扩展-为什么可以';我叫一个页面';s函数?它从控制台工作,javascript,safari-extension,safari-web-inspector,Javascript,Safari Extension,Safari Web Inspector,我有一个safari扩展,它在页面的左上角添加了一个按钮。我想让它做的就是调用一个javascript函数,当我按下这个按钮时,这个函数在原始页面中定义 当我尝试这一点时,我只会返回“找不到变量:resorganizeData” 但是,如果我从控制台调用reorganizeData(),它可以完美地工作 我100%确定页面已完全加载。Iv'e甚至尝试将其延迟10秒。您的扩展注入的脚本由Safari隐式命名,以保护它不受文档名称空间的影响(反之亦然)。这就是为什么注入的脚本不能调用文档中声明的函数
我100%确定页面已完全加载。Iv'e甚至尝试将其延迟10秒。您的扩展注入的脚本由Safari隐式命名,以保护它不受文档名称空间的影响(反之亦然)。这就是为什么注入的脚本不能调用文档中声明的函数 为了解决这个问题,您的注入脚本可以在文档中插入一个
标记。您可以让插入的脚本为按钮添加一个click
事件处理程序,它将调用所需的函数
例如:
var myScript = document.createElement('script');
myScript.textContent = `
document.getElementById('my-button')
.addEventListener('click', functionIWantToCall);
`;
document.body.appendChild(myScript);
Safari隐式地为扩展的注入脚本命名,以保护它不受文档名称空间的影响(反之亦然)。这就是为什么注入的脚本不能调用文档中声明的函数 为了解决这个问题,您的注入脚本可以在文档中插入一个
标记。您可以让插入的脚本为按钮添加一个click
事件处理程序,它将调用所需的函数
例如:
var myScript = document.createElement('script');
myScript.textContent = `
document.getElementById('my-button')
.addEventListener('click', functionIWantToCall);
`;
document.body.appendChild(myScript);
我有一种感觉,这将是一个问题,你可能不会有什么可以做的。控制台不是一个真正公平的测试,也没有代表性。@phuzi-你真的认为这可能是一个S-O-P问题吗?我认为这更多是关于ajax调用的。从CDN加载jQuery时,它是如何工作的?也许这只是一种方法?我用我能想到的最蹩脚的方法来解决它。我在图片“onload”中插入了一个附带代码的图片,我觉得这会是一个问题,您可能对此无能为力。控制台不是一个真正公平的测试,也没有代表性。@phuzi-你真的认为这可能是一个S-O-P问题吗?我认为这更多是关于ajax调用的。从CDN加载jQuery时,它是如何工作的?也许这只是一种方法?我用我能想到的最蹩脚的方法来解决它。我在图片“onload”中插入了一个带有代码的图片