2012-10-27 102 views
3

我正在尝试构建一个Chrome扩展。它将用户名的背景图片网址放到页面中。但它会带来意想不到的错误错误文本是:Chrome:Uncaught ReferenceError jQuery没有定义

The page at https://twitter.com/jack ran insecure content from http://api.twitter.com/1/users/show.json?screen_name=jack&callback=jQuery18207089675806928426_1351333462593&_=1351333462594 .

Uncaught ReferenceError: jQuery18207089675806928426_1351333462593 is not defined (anonymous function)

error message

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

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

folder

action.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> • "); 
     });  
} 

background.html:

{ 
    "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

的第一个错误(“在HTTPS页面:... RAN

<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

manifest.json的拍摄来自http:// ...的不安全内容)只是一个警告,并非关键。

第二个错误是由执行上下文的差异造成的。见Chrome extension code vs Content scripts vs Injected scripts。正如您通过查看第一条警告所看到的那样,会生成一个JSONP请求。这意味着在页面中注入了一个<script>元素。这个脚本调用了一个函数(jQuery182....),因为jQuery是在内容脚本的上下文中加载的,所以无法找到它。

为了解决这个问题,无论是injectaction.js页面,或者(推荐)添加https://api.twitter.com/*到您的清单文件的权限部分,在你传递给$.getJSON的网址,而不要使用?callback=?