相关疑难解决方法(0)

Access-Control-Allow-Origin标头如何工作?

显然,我完全误解了它的语义.我想到了这样的事情:

  1. 客户端从http:// siteA下载javascript代码MyCode.js - 原点.
  2. MyCode.js的响应头包含Access-Control-Allow-Origin:http:// siteB,我认为这意味着允许MyCode.js对站点B进行跨源引用.
  3. 客户端触发MyCode.js的一些功能,它们反过来向http:// siteB发出请求,尽管是跨源请求,但这应该没问题.

好吧,我错了.它根本不起作用.所以,我已经阅读了跨源资源共享,并尝试在w3c推荐中阅读跨源资源共享

有一件事是肯定的 - 我仍然不明白我应该如何使用这个标题.

我完全控制了站点A和站点B.如何启用从站点A下载的javascript代码以使用此标头访问站点B上的资源?

PS

我不想使用JSONP.

javascript cross-domain cors

1050
推荐指数
13
解决办法
144万
查看次数

jQuery/JavaScript:访问iframe的内容

我想使用jQuery操纵iframe中的HTML.

我以为我可以通过将jQuery函数的上下文设置为iframe的文档来实现这一点,例如:

$(function(){ //document ready
    $('some selector', frames['nameOfMyIframe'].document).doStuff()
});
Run Code Online (Sandbox Code Playgroud)

然而,这似乎不起作用.一些检查显示我的变量frames['nameOfMyIframe']undefined除非我等待一段时间加载iframe.但是,当iframe加载时,变量不可访问(我得到permission denied-type错误).

有没有人知道这方面的解决方法?

javascript iframe jquery same-origin-policy

770
推荐指数
8
解决办法
63万
查看次数

由于MIME类型错误,Chrome拒绝执行AJAX脚本

我试图通过AJAX将脚本作为JSON访问,这在Safari和其他浏览器上运行良好但不幸的是不能在Chrome中执行.它出现以下错误:

拒绝从'*'执行脚本,因为它的MIME类型('application/json')不可执行,并且启用了严格的MIME类型检查.

这是请求:

$.ajax({
    url: "http://some_url/test.json?callback=?",
    type: "GET",
    dataType: 'json',
    cache: true,
    success: function (data, status, error) {
      console.log('success', data);
    },
    error: function (data, status, error) {
      console.log('error', data, status, error);
    }
});
Run Code Online (Sandbox Code Playgroud)

有人有解决方法吗?

javascript ajax jquery json google-chrome

142
推荐指数
3
解决办法
29万
查看次数

使用jQuery AJAX加载跨域端点

我正在尝试使用AJAX加载跨域HTML页面,但除非dataType是"jsonp",否则我无法获得响应.但是,使用jsonp,浏览器需要一个脚本mime类型,但是正在接收"text/html".

我的请求代码是:

$.ajax({
    type: "GET",
    url: "http://saskatchewan.univ-ubs.fr:8080/SASStoredProcess/do?_username=DARTIES3-2012&_password=P@ssw0rd&_program=%2FUtilisateurs%2FDARTIES3-2012%2FMon+dossier%2Fanalyse_dc&annee=2012&ind=V&_action=execute",
    dataType: "jsonp",
}).success( function( data ) {
    $( 'div.ajax-field' ).html( data );
});
Run Code Online (Sandbox Code Playgroud)

有没有办法避免使用jsonp进行请求?我已经尝试过使用crossDomain参数,但它没有用.

如果没有,是否有任何方式在jsonp中接收html内容?目前,控制台在jsonp回复中说"意外<".

javascript ajax jquery cross-domain cors

127
推荐指数
4
解决办法
26万
查看次数

关于跨域(子域)ajax请求的问题

假设我从http://www.example.com/index.html加载了主页面.在该页面上有js代码向http://n1.example.com//echo?message=hello发出ajax请求.收到响应后,主页上的div将使用响应正文进行更新.

这适用于所有流行的浏览器吗?

编辑:

显而易见的解决方案是将代理放在www.example.com和n1.example.com之前并进行设置,以便每个发送到http://www.example.com/n1子资源的请求都代理到http: //n1.example.com/.

javascript ajax

50
推荐指数
3
解决办法
8万
查看次数

跨域iframe问题

比方说我有一个名为example.com的网站,iframe嵌入了iframe.net域,现在我想读取iframe的内容并传递一些参数来显示文本消息.喜欢你用户名.

现在问题是这个无法在两者之间建立连接,甚至无法获得我使用的iframe的innerHTML

document.getElementById('myframe').contentWindow.document.body.innerHTML;
Run Code Online (Sandbox Code Playgroud)

它抛出错误"权限被拒绝访问属性"

有谁知道如何在跨域平台上读写

html javascript jquery html5 mootools

42
推荐指数
2
解决办法
6万
查看次数

AJAX调用和清理JSON但语法错误:缺失; 在声明之前

我正在使用以下代码进行跨域JSONP调用:

jQuery.ajax({
        async: true,
        url: 'http://mnews.hostoi.com/test.json',
        dataType: 'jsonp',
        method: "GET",
        error: function (jqXHR, textStatus, errorThrown) {
            console.log(textStatus + ': ' + errorThrown);
        },
        success: function (data, textStatus, jqXHR) {
            if (data.Error || data.Response) {
                exists = 0;
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

在Firebug中调试时,我收到以下错误:

在此输入图像描述

SyntaxError: missing ; before statement
Run Code Online (Sandbox Code Playgroud)

但是,当我通过像jsonlint.com这样的工具传递我的json对象(通过JQ代码中的链接可用)时,它说它是有效的JSON.我也没有发现任何异常现象.怎么会返回语法错误?它是一些JSONP细节我没有得到或什么?

JSON示例

{"news":[ {
  "sentences": [
    "Neuroscientists have discovered abnormal neural activity...", 
    "The researchers found that these mice showed many symptoms...", 
    "\"Therefore,\" the study authors say, \"our findings provide a novel.."
  ], 
  "summaryId": "ZJEmY5", …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery json jsonp

42
推荐指数
2
解决办法
6万
查看次数

在Chrome中使用iframe和本地文件

我很难搞清楚如何从外页访问iframe中加载的页面.这两个页面都是本地文件,而我正在使用Chrome.

我有一个外页和许多内页.外部页面应始终显示内部页面的页面标题(在我的应用程序中有意义,在这个精简的示例中可能更少).这在AppJS中没有任何问题,但我被要求直接在浏览器中使这个应用程序工作.我收到错误" Blocked a frame with origin"null"来访问一个原始"null"的帧.协议,域和端口必须匹配. "

我认为这是由于Chrome与本地文件的原始政策相同,但这并没有帮助我直接解决问题.我可以通过在每种方法中使用window.postMessage方法绕过同一起源策略来解决这个简化示例中的问题.但是,超越这个例子,我还想从外页操作内页的DOM,因为这会使我的代码更清晰 - 所以发布消息将不会完成这项工作.

外页

<!DOCTYPE html>
<html>
    <head> 
        <meta name="viewport">
    </head> 
    <body>
        This text is in the outer page
        <iframe src="html/Home.html" seamless id="PageContent_Iframe"></iframe>
        <script src="./js/LoadNewPage.js"></script>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

内页

<!DOCTYPE html>
<html>
    <head>
        <title id="Page_Title">Home</title> 
        <meta name="viewport">
    </head> 
    <body>
        This text is in the inner page
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

JavaScript的

var iFrameWindow = document.getElementById("PageContent_Iframe").contentWindow;
var pageTitleElement = iFrameWindow.$("#Page_Title");
Run Code Online (Sandbox Code Playgroud)

它是可能的Chrome支持contentWindow/contentDocument的未来版本时加载的iFrame从本地的HTML文件的本地HTML文件?,我尝试用旗帜启动Chrome

--allow-file-access-from-files
Run Code Online (Sandbox Code Playgroud)

但结果没有变化.

每次在Chrome中禁用相同的来源政策,我尝试使用旗帜启动Chrome

--disable-web-security
Run Code Online (Sandbox Code Playgroud)

但结果再没有变化.

Per document.domain …

javascript iframe google-chrome same-origin-policy appjs

36
推荐指数
2
解决办法
7万
查看次数

从内容脚本将HTML注入页面

我正在构建Chrome扩展程序,我需要在几个网站上叠加一大块html.目前我正在使用JQuery .Get从我的服务器中提取html.为了提高性能,我想知道是否可以将html作为文件包含在扩展目录中并直接从那里访问源代码?有谁知道这是否可能?

UPDATE

Rob的建议完成了这项工作(见接受的答案).唯一的额外步骤是在web_accessible_resources下的清单中注册该文件.

{
  ...
  "web_accessible_resources": [
    "myimportfile1.html",
    "myimportfile2.html"
  ],
  ...
}
Run Code Online (Sandbox Code Playgroud)

google-chrome google-chrome-extension

33
推荐指数
4
解决办法
3万
查看次数

来自移动WebView的CORS cookie凭证在本地加载了file://

跟我说,这个需要一些解释.

我正在帮助构建混合移动Web应用程序.主要代码库是HTML5和JavaScript,它将包装在本机移动Web视图(一个电话空间)中.

部分功能要求应用程序将信息发布到由我们的客户控制的Web服务.由于其他人正在使用此Web服务,因此几乎没有空间可以更改此Web服务.我们使用HTTP POST发送JSON并从服务器接收响应.此响应的一部分是一个JSESSIONID cookie,用于管理与服务器的会话.在初始initSession()调用之后,我们需要使用每个(AJAX)请求发送JSESSIONID cookie.

当部署在移动设备上时,Web应用程序将包装在本机Web视图中,该视图通过浏览启动Web应用程序file:///path/to/app/index.html.

我们尝试的第一件事是要求我们的客户Access-Control-Allow-Origin: *在其响应头中设置允许CORS.然后我们尝试发布到服务器:

$.ajax({
  url: 'http://thirdparty.com/ws',
  data: data,
  type: "POST",
  dataType: "JSON",
  success: successCallback,
  error: failedCallback
});
Run Code Online (Sandbox Code Playgroud)

监控请求,显然没有包含cookie.仔细观察后,CORS规范中有一个特殊部分用于处理用户凭证,其中包括会话cookie.所以我修改了AJAX调用以包含这个:

$.ajax({
  url: 'http://thirdparty.com/ws',
  data: data,
  type: "POST",
  dataType: "JSON",
  success: successCallback,
  error: failedCallback,
  xhrFields { withCredentials: true }
});
Run Code Online (Sandbox Code Playgroud)

另一个错误,这次来自浏览器.更多阅读产生了以下内容:

如果第三方服务器没有响应Access-Control-Allow-Credentials: true标头,则响应将被忽略,并且不可用于Web内容.

重要说明:在响应凭证请求时,服务器必须在Access-Control-Allow-Origin标头中指定域,并且不能使用通配符.

因此,我们需要更改服务器的标头以包含Access-Control-Allow-Credentials: trueAccess-Control-Allow-Origin我们的Origin.

在这里,我们终于遇到了一个问题:使用file:// protocol加载网页时Origin,Web View发送的请求标头设置为null.因此无法由服务器解析,因此服务器无法将其设置为Access-Control-Allow-Origin.但是,如果服务器不能设置Access-Control-Allow-Origin到其他的东西比* …

javascript cookies ajax web-services cors

30
推荐指数
2
解决办法
1万
查看次数