uni-app鸿蒙harmony next 使用PDF.js预览文件报错跨域怎么解决
uni-app鸿蒙harmony next 使用PDF.js预览文件报错跨域怎么解决
问题描述
使用的是PDF.js插件预览(web-view :src=xxx),安卓没有问题,鸿蒙报错
“Access to fetch at ‘https://xxxxxxxxxxxxxxxxxxxx’ from origin ‘null’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. If an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled.”,页面显示Message:Failed to fetch
src直接使用网络地址不用pdf.js可以浏览文件,但浏览页面全屏显示,无法控制样式
想问问各位大佬这个怎么解决?
更多关于uni-app鸿蒙harmony next 使用PDF.js预览文件报错跨域怎么解决的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app鸿蒙harmony next 使用PDF.js预览文件报错跨域怎么解决的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在uni-app鸿蒙Harmony Next平台上使用PDF.js预览PDF文件时遇到跨域问题,通常是因为PDF文件存储在一个不允许跨域访问的服务器上。解决跨域问题的一种常见方法是通过配置服务器端的CORS(跨来源资源共享)策略,但在某些情况下,特别是当你不控制服务器时,这种方法可能不适用。下面是一个通过代理服务器解决跨域问题的代码示例,这种方法不依赖于服务器端的CORS配置。
步骤一:搭建本地代理服务器
你可以使用Node.js和express
框架快速搭建一个本地代理服务器。这个代理服务器将请求转发到目标服务器,并添加适当的CORS头。
首先,确保你已经安装了Node.js和npm。然后,创建一个新的Node.js项目并安装express
和cors
包:
mkdir pdf-proxy
cd pdf-proxy
npm init -y
npm install express cors
创建一个名为server.js
的文件,并添加以下代码:
const express = require('express');
const cors = require('cors');
const fetch = require('node-fetch');
const app = express();
const port = 3000;
app.use(cors());
app.get('/proxy/:url', async (req, res) => {
const url = decodeURIComponent(req.params.url);
try {
const response = await fetch(url);
const data = await response.buffer();
res.setHeader('Content-Type', 'application/pdf');
res.send(data);
} catch (error) {
res.status(500).send(error.message);
}
});
app.listen(port, () => {
console.log(`Proxy server running at http://localhost:${port}`);
});
步骤二:在uni-app中使用代理服务器
在你的uni-app项目中,修改请求PDF文件的URL,使其通过你搭建的代理服务器。例如,如果你的PDF文件原始URL是https://example.com/file.pdf
,你可以修改为:
const pdfUrl = 'http://localhost:3000/proxy/https%3A%2F%2Fexample.com%2Ffile.pdf';
确保你的uni-app项目能够访问这个本地代理服务器(例如,在开发环境中运行代理服务器和uni-app项目在同一台机器上)。
结论
通过上述方法,你可以绕过跨域限制,成功在uni-app鸿蒙Harmony Next平台上使用PDF.js预览PDF文件。这种方法的关键在于搭建一个本地代理服务器,它负责转发请求并添加CORS头,从而使得跨域请求成为可能。注意,这种方法在生产环境中可能需要额外的安全措施,比如身份验证和访问控制。