2024.04.16 随心写:发现本博客下“相关推荐”中,还有不少今年3月、4月新发布的讨论Clodop无法使用的帖子,但点进去一看其内容仍在重复之前早就发布的没有什么作用的所谓解决方案。大家如果真的怀念CSDN作为干货技术贴的过往,真的希望中文互联网搜索引擎在搜此类问题时候能给有用的回答,请用实际行动(点赞、转发、评论)支持真正有用的帖子,对重复帖子点踩,拒绝无时无刻被喂shi!!!
本方案是博主在自己校内系统遇到这个问题后,在互联网上找了一圈,发现现有能搜到的回答(让你重装、换版本、换64位/32位安装包等不痛不痒的方案)都不能实际解决问题,故写此解决方案
能识别到学校或网站的相关要素已脱敏或打码
想看解决方法的直接点击下方目录,跳到“问题解决”这里
目录
1.问题描述
试图使用某网页的“打印”功能导出在线表格时,提示你安装‘CLodop’云打印服务,按照要求安装并重启浏览器乃至重启操作系统后,确认CLodop服务已经在后台启动,且能够通过端口号访问,访问以下链接看到的是CLodop的初始化欢迎页:
或
该提示仍然存在,且“打印为PDF功能”仍不可用
![网页无法调用CLodop](https://i-blog.csdnimg.cn/blog_migrate/7e1fad220ccab19f579cb68ef03cff1a.png)
![一系列相关服务的安装包](https://i-blog.csdnimg.cn/blog_migrate/85e67597f348b0f362af53767c421fec.png)
2.问题分析
这里的Clodop云打印本质上是一个配置在本地localhost的,开放8000端口的,以web api方式工作的服务器,它被用于将HTML内容渲染成打印输出的内容
当CLodop服务本身可以通过本地端口访问,但特定网页试图调用它时,却仍提示不能使用该服务,我们很容易想到这应该是网页对服务的调用问题,而不是服务自身的安装配置问题
通过浏览器的开发者工具-控制台/console选项卡,我们点击一次“打印”,得到了以下结果:
对这个结果的解读如下:
图片:分点解读
每次点击“打印”按钮时,会有响应的onclick处理过程①与之绑定并触发,在执行这个过程时出错了,这个过程有一个步骤是②试图从localhost:8000处的目录请求加载一个外部js文件,这个请求是③由当前网站(career.xxx.edu)发出的,④因为这属于跨域请求所以被安全策略给禁止了。
![分点解读1](https://i-blog.csdnimg.cn/blog_migrate/4ea4929357604c9a14c41c24a422f121.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7093450db5770e55d86e570bd04f2ffc.png)
3.问题解决
很简单的思路:
问:跨域请求为什么会被禁止?
答:因为当前浏览器的安全策略设置不允许
问:如何让被禁止的行为重新被放行
答:更改当前浏览器的安全策略
问:如何更改当前浏览器的安全策略
答:带有明确问题识别结果的纯技术问题,可以带关键词去搜索引擎搜
问题分析完成后,在具体技术操作方面,就不需要自己从0开始探索了,在这里直接搜到并借鉴了本站博主的博客内容:前端技能点--The request client is not a secure context问题https://blog.csdn.net/woshisangsang/article/details/121435657针对当前具体问题,步骤如下:
- 对于谷歌浏览器,输入chrome://flags/#block-insecure-private-network-requests ;如果是edge浏览器,输入edge://flags/#block-insecure-private-network-requests,即:将链接中的“chrome”换成“edge”就行了,edge放弃了IE内核,和谷歌用了同一套内核。更多其它浏览器请自己用搜索引擎查找解决方法
- 将页面中的block-insecure-private-network-requests选项设置为disable即可,然后重启浏览器后应该能够调用CLodop
![]()
修改block insecure private network requests安全策略
如果这样操作后还没有成功解决问题,有可能是因为该浏览器启用了更新的内核版本,使得跨域访问的相关安全策略又增加了一条,比如:谷歌2022年12月发布的108版本内核。
此时,上述操作不需要还原,并且进一步进行以下步骤:
- 对于谷歌浏览器,输入chrome://flags/#unsafely-treat-insecure-origin-as-secure ;edge等其他浏览器需要输入的内容处理方式类似于上条
- 将页面中的选项改为 Enable,然后在下方的输入框中把当前网页的网址输入(在本问题中,我们是在使用某就业网站时遇到了这个问题,所以我们把就业网站的根服务器URLhttp://career.xxx.edu.cn输入),这意味着将其加入白名单;然后重启浏览器
*如果是在其他需要调用CLodop的网站遇到这个问题,只需要找到在图片:分点解读中,找到报错信息中的"Access to script at 'http://localhost' from origin '这个引号里面的网址' has been blocked by CoRs policy",将实际显示的 '这个引号里面的网址' 复制粘贴过去就行了
![]()
在unsafely treat insecure origin as secure策略中加入白名单
在这样设置之后,CLodop打印服务能够被正常调用
4.问题反思
这篇博客其实酝酿了一段时间了,当时在哪看到了下面这句话,但是今天写的时候找不到出处了:
“Chrome 87 添加了一个标志,强制要求向专用网络资源发出请求的公共网站必须使用 HTTPS”
Chrome87,是2020年5月左右发布的。
很难想象这个云打印组件的开发环境是哪里的上古环境,为什么在开发过程中没有意识到由JS这样来发送跨域请求的方式是不被提倡的?
2020年内核更新后,应用CLodop建设web服务的机关、事业单位的目标用户应当大量地无法使用这个服务,面对大量的服务失效和用户投诉事件,这个问题一直到现在都没有从CLodop自身技术的层面解决,技术问题暂且不论,管理问题到底是出现在哪里?