Chrome应用程序:从服务器上的文件读取和写入数据


Chrome app: Reading and writing data from/to a file on a server

我基本上想对服务器上的PHP文件进行AJAX调用。使用XMLHttpRequest似乎不起作用。假设我有以下文件:

PHP文件:http://abc.de.fg/folder/data.php

和一个txt文件:http://abc.de.fg/folder/data.txt

我想从我的chrome应用程序中,将一些数据传递到该PHP文件,然后等待响应。PHP文件将读取和写入data.txt文件。

当我尝试在chrome应用程序中执行此操作时(我知道此代码在标准网页中运行时有效),我会收到以下错误:

Refused to set unsafe header "Content-length" main.js:250
(anonymous function) main.js:250
Refused to set unsafe header "Connection" main.js:251
(anonymous function) main.js:251
OPTIONS http://abc.de.fg/folder/data.php No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'chrome-extension://ndakgilfeodmfkdmoojoeeckpajmflcd' is therefore not allowed access. main.js:253
(anonymous function) main.js:253
XMLHttpRequest cannot load http://abc.de.fg/folder/data.php. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'chrome-extension://ndakgilfeodmfkdmoojoeeckpajmflcd' is therefore not allowed access.

您听说过跨来源资源共享吗?这就是阻止客户端脚本访问来自不同域的信息的原因。不同的域可能是完全不同的命名空间、子域,甚至是不同的端口

链接的维基百科文章命名了你需要在PHP生成的响应中发送的标题:Access-Control-Allow-Origin,你的浏览器已经说它缺少。

根据您的情况,您可能最好使用JSONP,因为它不需要设置该标头。如果遵循这样一种模糊的模式,很难设置一个正确的允许URI:chrome-extension://ndakgilfeodmfkdmoojoeeckpajmflcd

我不确定这是在安装过程中创建的浏览器生成的UID,还是Chrome应用商店中提供的插件的UUID。我不是Chrome应用程序开发人员。。。

很难确定,但我会检查以确保您在清单文件中拥有正确的权限(您能从应用程序的网络选项卡导出失败请求的HAR吗?)。如果您已在权限中声明了该主机,则允许您在应用程序中进行跨域请求,请参阅本页表中的第一项:http://developer.chrome.com/extensions/declare_permissions.html

简而言之,权限"[scheme]:[host]/*"-

指定主机权限。如果扩展或应用程序希望与页面上运行的代码进行交互,则为必需项。许多功能,如交叉源XMLHttpRequest、程序注入的内容脚本和扩展的cookie API,都需要主机权限。

因此,对于上面的PHP示例,您可以在清单文件中有:

"permissions": [
    "http://abc.de.fg/*",
    ...
]