Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Safari扩展-为什么可以';我叫一个页面';s函数?它从控制台工作_Javascript_Safari Extension_Safari Web Inspector - Fatal编程技术网

Javascript Safari扩展-为什么可以';我叫一个页面';s函数?它从控制台工作

Javascript Safari扩展-为什么可以';我叫一个页面';s函数?它从控制台工作,javascript,safari-extension,safari-web-inspector,Javascript,Safari Extension,Safari Web Inspector,我有一个safari扩展,它在页面的左上角添加了一个按钮。我想让它做的就是调用一个javascript函数,当我按下这个按钮时,这个函数在原始页面中定义 当我尝试这一点时,我只会返回“找不到变量:resorganizeData” 但是,如果我从控制台调用reorganizeData(),它可以完美地工作 我100%确定页面已完全加载。Iv'e甚至尝试将其延迟10秒。您的扩展注入的脚本由Safari隐式命名,以保护它不受文档名称空间的影响(反之亦然)。这就是为什么注入的脚本不能调用文档中声明的函数

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

当我尝试这一点时,我只会返回“找不到变量:resorganizeData”

但是,如果我从控制台调用reorganizeData(),它可以完美地工作


我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”中插入了一个带有代码的图片