显然,我完全误解了它的语义.我想到了这样的事情:
好吧,我错了.它根本不起作用.所以,我已经阅读了跨源资源共享,并尝试在w3c推荐中阅读跨源资源共享
有一件事是肯定的 - 我仍然不明白我应该如何使用这个标题.
我完全控制了站点A和站点B.如何启用从站点A下载的javascript代码以使用此标头访问站点B上的资源?
PS
我不想使用JSONP.
我想使用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错误).
有没有人知道这方面的解决方法?
我试图通过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)
有人有解决方法吗?
我正在尝试使用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回复中说"意外<".
假设我从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/.
比方说我有一个名为example.com的网站,iframe嵌入了iframe.net域,现在我想读取iframe的内容并传递一些参数来显示文本消息.喜欢你用户名.
现在问题是这个无法在两者之间建立连接,甚至无法获得我使用的iframe的innerHTML
document.getElementById('myframe').contentWindow.document.body.innerHTML;
Run Code Online (Sandbox Code Playgroud)
它抛出错误"权限被拒绝访问属性"
有谁知道如何在跨域平台上读写
我正在使用以下代码进行跨域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细节我没有得到或什么?
{"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) 我很难搞清楚如何从外页访问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)
但结果再没有变化.
我正在构建Chrome扩展程序,我需要在几个网站上叠加一大块html.目前我正在使用JQuery .Get从我的服务器中提取html.为了提高性能,我想知道是否可以将html作为文件包含在扩展目录中并直接从那里访问源代码?有谁知道这是否可能?
UPDATE
Rob的建议完成了这项工作(见接受的答案).唯一的额外步骤是在web_accessible_resources下的清单中注册该文件.
{
...
"web_accessible_resources": [
"myimportfile1.html",
"myimportfile2.html"
],
...
}
Run Code Online (Sandbox Code Playgroud) 跟我说,这个需要一些解释.
我正在帮助构建混合移动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: true和Access-Control-Allow-Origin我们的Origin.
在这里,我们终于遇到了一个问题:使用file:// protocol加载网页时Origin,Web View发送的请求标头设置为null.因此无法由服务器解析,因此服务器无法将其设置为Access-Control-Allow-Origin.但是,如果服务器不能设置Access-Control-Allow-Origin到其他的东西比* …
javascript ×9
ajax ×5
jquery ×5
cors ×3
cross-domain ×2
iframe ×2
json ×2
appjs ×1
cookies ×1
html ×1
html5 ×1
jsonp ×1
mootools ×1
web-services ×1