2012-03-23 63 views
0

我正在编写需要访问使用oAuth 2.0进行身份验证的minus.com的Chrome扩展的代码,所以我编写了一个JavaScript文件'test.js',然后将其包含在HTML文件'test.html'中,然后在Chrome中加载'test.html'以测试用于验证的JavaScript代码。Chrome中的错误:“原始文件://不被Access-Control-Allow-Origin允许”

的“test.js”看起来像这样的结构:

function Ajax(url, options) { 

// some function content 

    // Sending data 
    if (options.method === "POST" && (options.params || options.binaryData)) { 
     if (options.binaryData) { 
      xhr.sendAsBinary(options.binaryData); 
     } else { 
      xhr.send(hashToQueryString(options.params)); 
     } 
    } else { 
     xhr.send(null); 
    } 

    return xhr; 
} 

function refreshToken(refresh_token) { 
    var params = { 
     'grant_type': 'refresh_token', 
     'client_id': API_KEY, 
     'client_secret': API_SECRET, 
     'refresh_token': refresh_token, 
     'scope': 'read_all modify_all upload_new' 
    } 

    new Ajax("https://minus.com/oauth/token", { 
     params: params, 

     onSuccess: function(response) { 
      console.log(response.access_token); 
     }, 

     onError: function(response) { 
      console.log('error: wrong_token'); 
     } 
    });    
} 

refreshToken(); 

当我加载Chrome中的“的test.html”测试“test.js”,它促使在控制台的错误,说“XMLHttpRequest无法加载https://minus.com/oauth/token?...原始文件://不被Access-Control-Allow-Origin允许。”我尝试使用“--allow-file-access-from-files”或“--disable-web-security”选项启动Chrome,但它没有解决问题。但是,如果我在“Ajax”函数中评论了“发送数据”部分,则没有错误。

有没有人有想法这里发生了什么?

谢谢!

+1

我相信你正在调用你的请求跨域。如果您这样做,Chrome浏览器将发出此错误。 – Raptor 2012-03-23 03:04:03

+0

那么如何解决这个问题? – chaohuang 2012-03-23 03:07:00

回答

1

您可以通过将您的应用程序设置为支持跨域调用的打包应用程序来解决此问题。托管的应用程序不。

您可能还需要阅读Cross-Origin XMLHttpRequest in chrome extensions

+0

Hi Marius,我已将我的扩展程序打包到.crx文件中,但我不知道如何将其加载到Chrome中。似乎在Chrome扩展页面中只有“加载解压扩展名”选项。 – chaohuang 2012-03-25 03:54:27

+0

@ chaohuang只需将它拖放到Chrome上即可安装。不过,如果它是一个crx而不是解压缩的扩展名,它并没有什么区别。 Marius的意思是,如果你的扩展是一个托管的应用程序,你不会得到跨域请求,但它似乎并不是你的情况。 – Stefano 2012-03-25 16:43:16

+0

我认为只是试图打开crx文件(文件 - >打开文件)将安装它,但拖放应该工作以及斯特凡诺说。 – 2012-03-28 13:24:06

2

要非常具体的关于您的问题:你需要添加你希望能够跨域访问到您的扩展清单中的主机:

http://code.google.com/chrome/extensions/xhr.html

{ 
    "name": "My extension", 
    ... 
    "permissions": [ 
    "https://*.minus.com/" 
    ], 
    ... 
} 

上的侧编辑

请注意,当我有很多扩展活动时,我有时会在我的浏览器中出现奇怪的跨域错误。然后,我必须禁用至少一对,刷新扩展,它的工作原理 - 或者有时重新启动铬。

+0

嗨,Stefano,我已经按照您的建议将主机域名“https://*.minus.com/”添加到'manifest.json'文件中,但错误更改为“Origin chrome-extension:// imoialplpijakfpmofocnamgopchikjk Access-Control-Allow-Origin不允许“。我还有什么遗漏吗?谢谢! – chaohuang 2012-03-25 03:33:53

+0

@chaohuang你究竟如何“加载”test.html?它是您的背景页面,浏览器操作还是...? (它应该在任何情况下工作,但...) – Stefano 2012-03-25 16:39:30

+0

'test.html'是我的背景页面。 – chaohuang 2012-03-25 17:17:25

相关问题