在前端引入第三方JS时跨域是一个常见的问题。要解决这个问题,可以使用以下几种方法:

  1. JSONP(JSON with Padding):JSONP是一种利用<script>标签可以跨域加载的特性来实现跨域请求的方法。通过在URL中添加一个回调函数的参数,让服务器返回一个指定函数名的JavaScript代码,在前端通过回调函数来处理返回的数据。
function handleResponse(data) {
  // 处理返回的数据
}

const script = document.createElement('script');
script.src = 'http://example.com/api?callback=handleResponse';
document.head.appendChild(script);

请注意,使用JSONP存在一些安全风险,因为它是通过动态创建<script>标签加载外部脚本,所以需要确保加载的脚本是可信的,且不会执行恶意代码。

  1. CORS(跨域资源共享):CORS是现代浏览器中解决跨域问题的标准方法。在服务器端设置相应的请求头,允许跨域请求。前端不需要特别处理,直接使用fetchXMLHttpRequest等方式发送请求即可。
fetch('http://example.com/api')
  .then(response => response.json())
  .then(data => {
    // 处理返回的数据
  })
  .catch(error => {
    // 处理错误
  });

请在服务器端设置以下响应头,允许跨域请求:

Access-Control-Allow-Origin: *

如果只允许特定的源访问,可以将*替换为对应的域名。

  1. 代理服务器:可以在自己的服务器上设置一个代理,将请求转发给第三方服务器。这样前端通过访问自己的服务器就能够避免跨域问题。
fetch('/api')
  .then(response => response.json())
  .then(data => {
    // 处理返回的数据
  })
  .catch(error => {
    // 处理错误
  });

在服务器端将请求转发到第三方服务器的示例代码(使用Node.js和Express):

const express = require('express');
const fetch = require('node-fetch');

const app = express();

app.get('/api', (req, res) => {
  const url = 'http://example.com/api'; // 第三方API的URL
  fetch(url)
    .then(response => response.json())
    .then(data => {
      res.json(data);
    })
    .catch(error => {
      res.status(500).json({ error: 'An error occurred' });
    });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

以上是解决前端引入第三方JS跨域问题的几种常见方法,根据具体情况选择最适合的方法。