解析"No 'Access-Control-Allow-Origin'页眉存在"Ch
Resolve "No 'Access-Control-Allow-Origin' header is present" issue with Chrome Extension
我正在开发一个Chrome扩展,预填充字段,然后在外部网站上提交表单,当我访问它。
当数据硬编码到我的script.js
文件时,它可以完美地工作。但是,我想从我的内部网主页&在脚本中使用它,而不是硬编码。
我做了一个简单的script.js
来测试这个工作:
script.js:
$.get('https://intranet/index.php', function(data){
alert('test');
});
当我尝试在我的扩展中使用这个并重新加载页面时,我得到错误:
XMLHttpRequest cannot load https://intranet/index.php. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'chrome-extension://eecikfibchjhmochelhmhlimbcjglldf' is therefore not allowed access. The response had HTTP status code 401.
当同样的代码在https://intranet/test.html上运行时,它可以完美地工作。
test.html:
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<script type="text/javascript">
$.get('https://intranet/index.php', function(data){
$(document.body).load('https://intranet/ #username');
});
</script>
index . php:
<?php
header("Access-Control-Allow-Origin: *");
echo '<div id="username">username</div>';
?>
我读到一些使用JSONP
来解决这个问题。有人有过这样的经历吗?
感谢您的指导。
这里似乎同时存在两个问题。
请求的资源上没有'Access-Control-Allow-Origin'标头。
看起来不像你彻底搜索了解决方案,因为这是一个常见的问题。总之,有两种方法可以解决这个问题:
-
在扩展端。如果您有主机权限,则可以执行跨域请求,而不管CORS标头是什么。(注意:"当相同的代码在https://intranet/test.html上运行时,它可以完美地工作"强调问题是交叉-origin,但在同一站点上工作)。
关于这个有一篇完整的扩展文档文章:跨域XMLHttpRequest,但是一个超短的版本:你需要在manifest中添加站点的权限:
"permissions": [ "https://intranet/*" ],
-
在服务器端,通过添加
Access-Control-Allow-Origin: *
头。请注意,这种解决方案打开了一个特定的攻击面(现在不仅您的扩展可以执行请求),所以方法1是可取的。
也就是说:你试图实现方法2,但它不起作用。为什么?因为还有第二个问题:
响应的HTTP状态码为401
HTTP 401是"未经授权"。您的请求缺乏必要的授权-当您使用内部网站点本身时,您不会看到这一点,因为浏览器已经缓存了这些凭据。
但是它们不会应用于跨域请求,所以你得到一个401错误页面而不是预期的页面-不包含你的头。
您需要在请求的同时提供授权。jQuery允许:
$.get(
{
url: 'https://intranet/index.php',
username: '...',
password: '...'
}, function(data){
alert('test');
}
);
我认为这应该是显而易见的,不应该硬编码在扩展
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- 铬:“;未捕获的语法错误:意外的标记:"
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 用于检查数组中是否存在元素的javascript自定义方法
- 使用“+="操作人员
- "所请求的名称已经作为不同类型的“”存在;HTTP 409响应错误
- JSHint”;可能存在严重违规行为"当使用“bind”时
- jQuery脚本,它搜索现有的查询参数并且不添加“"如果存在
- 得到"否'访问控制允许来源'标头存在于请求的资源上"对于我的JS AJAX而不是“;
- 名称'"函数“;在当前上下文中不存在
- 如何避免“;否'访问控制允许来源'标头存在"javascript错误
- XMLHttpRequest无法加载“..否'访问控制允许来源'标头存在于请求的资源上"——J
- 检查“”中是否存在属性;窗口“;如果“;窗口"未准备好
- CORS "No 'Access-Control-Allow-Origin'页眉存在"
- 是否存在使用“;JQuery.on()"大量地