当前位置: 首页 > news >正文

crossOriginLoading使用说明

1. 说明

此配置用于控制 Webpack 动态加载的代码块(chunk)(例如代码分割或懒加载的模块)在跨域(不同域名)加载时的行为。它通过为动态生成的 <script>标签添加 crossorigin 属性,确保符合跨域资源共享(CORS)的安全策略

可选值

  • false(默认值)😗
    不添加 crossorigin 属性到动态加载的 <script> 标签。
    适用场景:资源与主应用同域(无跨域需求)
  • anonymous:
    为 <script> 标签添加 crossorigin=“anonymous” 属性。
    请求行为:不携带凭据(如 Cookies、HTTP 认证信息)。
    服务器要求:响应头需包含 Access-Control-Allow-Origin: * 或明确允许请求的来源域名。
  • use-credentials:
    为 <script> 标签添加 crossorigin=“use-credentials” 属性。
    请求行为:携带凭据(如 Cookies、HTTP 认证信息)
    服务器要求:响应头需满足:
    Access-Control-Allow-Origin: <具体来源域名>(不能为 *)
    Access-Control-Allow-Credentials: true

2. 使用场景

具体使用场景示例:主应用与 CDN 跨域加载静态资源
场景描述

  • 主应用:部署在 https://my-app.com
  • 静态资源(Webpack 打包后的 JS/CSS 文件)托管在 CDN:https://cdn.my-app.com。
  • 问题:

当浏览器加载 CDN 上的 JS 文件时,控制台报错:
Access to script at ‘https://cdn.my-app.com/main.js’ from origin ‘https://my-app.com’
has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present.

解决方案

  1. Webpack 配置

在 webpack.config.js 中启用跨域加载策略:
module.exports = {
output: {
publicPath: “https://cdn.my-app.com/”, // 资源托管在 CDN
crossOriginLoading: “anonymous”, // 添加 crossorigin=“anonymous”
},
};

  1. Webpack 会为动态加载的 <script> 标签添加 crossorigin=“anonymous” 属性

<script src=“https://cdn.my-app.com/main.js” crossorigin=“anonymous”></script>

  1. CDN/服务器配置
    3.1 在 CDN(如 AWS S3、阿里云 OSS)或 Nginx 服务器中配置 CORS 响应头

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET

3.2(若使用 use-credentials,需指定具体域名并开启 Access-Control-Allow-Credentials: true)

3. 验证效果

  1. 浏览器 Network 面板
  • 检查 JS 文件的请求头:

Origin: https://my-app.com

  • 检查响应头:

Access-Control-Allow-Origin: *

  1. 错误信息捕获
  • 启用 crossOriginLoading 后,通过 window.onerror 可捕获更详细的跨域脚本错误:

window.onerror = function (message, source, lineno, colno, error) {
console.log(“脚本错误详情:”, error);
};

相关文章:

  • gradle-缓存、依赖、初始化脚本、仓库配置目录详解
  • 【锂电池剩余寿命预测】GRU门控循环单元锂电池剩余寿命预测(Matlab完整源码)
  • 发布-订阅模式应用场景及示例说明
  • 桥接模式(Bridge Pattern)详解
  • Eigen矩阵操作类 (Map, Block, 视图类)
  • 系统设计(2)—Redis—消息队列—数据库—熔限降
  • babel核心知识点
  • 理想星环OS选择NuttX作为MCU侧OS的核心原因分析​
  • 在 Linux 上安装 PNPM 的教程
  • 20250426在ubuntu20.04.2系统上打包NanoPi NEO开发板的FriendlyCore系统刷机eMMC的固件
  • Windows---注册表
  • Redis | Redis集群模式技术原理介绍
  • 如何选择游戏支付平台呢?
  • 基于OpenMV+STM32+OLED与YOLOv11+PaddleOCR的嵌入式车牌识别系统开发笔记
  • LINUX426 文件权限rwx、ugo、高级权限(冒险、强制、粘滞位)、chmod修改权限 umask默认权限 软件包
  • C++---类和对象(二)
  • WPF 上位机开发模板
  • 动态规划求解leetcode300.最长递增子序列(LIS)详解
  • NdrpEmbeddedPointerUnmarshall函数分析之第二次循环处理第二部分DomainSid
  • 三维重建(二十)——思路整理与第一步的进行
  • 加总理:目前没有针对加拿大人的“活跃威胁”
  • 政治局会议深度|提出“设立新型政策性金融工具”有何深意?
  • 特朗普政府称将恢复被终止的外国学生合法身份
  • 破解160年基因谜题,我国科学家补上豌豆遗传研究最后拼图
  • 机票搜索热度飙升,透过数据看五一假期旅游热度
  • 南方医科大学原副校长宁习洲主动投案,接受审查调查