4

我正在尝试构建一个 chrome 扩展。它获取用户名的背景图片 url 并将其放入页面。但它给出了意想不到的错误。错误文本是:

https://twitter.com/jack上的页面运行了来自http://api.twitter.com/1/users/show.json?screen_name=jack&callback=jQuery18207089675806928426_1351333462593&_=1351333462594的不安全内容 。

未捕获的ReferenceError:未定义jQuery18207089675806928426_1351333462593(匿名函数)

错误信息

扩展文件夹包含以下文件:

action.js // background.html // jquery.min.js // manifest.json

文件夹

动作.js:

var userPage = document.URL;

var arr = userPage.split("/");
var username = "";
for(i=3;i<4;i++)
    username += arr[i];

var page = "http://api.twitter.com/1/users/show.json?screen_name="+username+"&callback=?"; 

background();

function background() {
        $.getJSON(page, function(data) {
            $("span.screen-name").append(" • <a href='"+data.profile_background_image_url+"'>B</a> • ");
        });     
}

背景.html:

<html>

<head>
<script type="text/javascript" src="/javas.js"></script>
</head>

<body>
</body>

</html>

jquery.min.js 取自http://code.jquery.com/jquery-1.8.2.min.js

清单.json:

{
  "name": "Twitter Background",
  "version": "1.0",
  "background_page": "background.html",
  "description": "Puts the background image url to the profile page.",
   "content_scripts": [
    {
      "matches": ["http://twitter.com/*","https://twitter.com/*"],
      "js": ["jquery.min.js","action.js"],
      "all_frames":true

    }
  ]
}
4

1 回答 1

4

第一个错误(“https:... 的页面从 http://... 运行了不安全的内容”)只是一个警告,并不重要。

第二个错误是由执行上下文的差异引起的。请参阅Chrome 扩展代码 vs 内容脚本 vs 注入脚本。正如您通过查看第一个警告所看到的,发出了一个 JSONP 请求。这意味着<script>在页面中注入了一个元素。该脚本调用了一个函数 ( jQuery182....),但无法找到该函数,因为 jQuery 是在内容脚本的上下文中加载的。

要解决此问题,请在页面中注入 action.js,或(推荐)添加https://api.twitter.com/*到清单文件的权限部分,并且不要?callback=?在您传递到的 URL 中使用$.getJSON.

于 2012-10-27T10:50:09.167 回答