来自 Safari 扩展的注入脚本中的 AJAX

Posted

技术标签:

【中文标题】来自 Safari 扩展的注入脚本中的 AJAX【英文标题】:AJAX from within a Safari Extension's injected script 【发布时间】:2011-07-05 10:12:47 【问题描述】:

我正在尝试在 Safari 扩展程序中使用注入脚本中的 API 来扩展短网址:

$.getJSON('http://api.longurl.org/v2/expand?format=json&url=' +  encodeURIComponent(href) + '&callback=?', function(data) 

    console.log(data);
);

我收到以下错误:

ReferenceError: Can't find variable: jQuery15103411371528636664_1298845652395

我尝试了不同的 API 并得到相同的错误,所以我知道不是这样。此外,如果我从控制台执行相同的代码,我会得到成功的响应。所以它一定与在 Safari 扩展的注入脚本中有关。

有什么想法吗?

【问题讨论】:

在我看来,$ 找到了通往命名变量的方法,但变量值丢失了……您是否尝试只记录 jquery 对象? 伊恩,我也遇到了同样的问题。你找到解决办法了吗? 您是否尝试过使用完整的 $.ajax 语句来代替?看起来它没有找到返回的 jquery 函数。您可能还想看看更手动地执行 JSONP 并自己定义返回函数。 【参考方案1】:

我相信你必须先将 jQuery 添加到插件中。下面是一个例子:

var newElement = document.createElement("script");
newElement.type = "text/javascript";
newElement.src = "//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js";
document.body.insertBefore(newElement, document.body.firstChild);

然后您可以使用您的插件在选项卡中执行 jQuery。 ;)

【讨论】:

情况并非如此。错误消息包含 jQuery 已经加载的证据;它在GET上附加了自己的回调名称“jQuery15103411371528636664_1298845652395”,由服务器与数据一起返回。

以上是关于来自 Safari 扩展的注入脚本中的 AJAX的主要内容,如果未能解决你的问题,请参考以下文章

来自 Share Extension 的 Safari 截图

Ajax 调用在 HTTPS 上被阻止 - Chrome 扩展

是否可以将事件侦听器绑定到来自外部脚本的影子 dom 内的元素?

为啥我的 Flexbox 粘滞页脚在 Safari 中不起作用?

允许跨域ajax请求

jquery - 如何从我发现的脚本中制作一个 iframe 到 ajax 注入中?