Lodop云打印控件外网访问无法调取本地打印机打印的解决方法

开始利用官方的js加载云打印脚本如下:

动态加载云打印JS文件

为了方便控制或兼容老程序,以上静态方法可以用如下动态语句替代,效果一样:

var oscript = document.createElement("script");

    oscript.src ="http://localhost:8000/CLodopfuncs.js?priority=1";

    var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;

    head.insertBefore( oscript,head.firstChild );

LodopFuncs.js中动态加载如图(3-1):

图(3-1)

云打印JS文件的优先级

<script src=”http://localhost:8000/CLodopfuncs.js? priority=1”></script>

    以上引用方法的参数priority设置的是优先级,优先级值是从0开始的阿拉伯数字,数字越大,优先级越高,默认是0。当一个页面按后续章节同时引用多个云主机时,优先级设置很关键,否则会按下载顺序来处理。

加载多个云打印JS文件

如果一个页面通过以上语句同时引用了两个云主机,通常后一个引用会覆盖前一个引用,其先后顺序是以下载js速度快慢为准,此时如果页面希望其中一个引用有更高的优先级,可以用url参数priority来控制,该参数值越大优先级越高,默认值为0,

例如:

<script src=”http://192.168.1.6:8000/CLodopfuncs.js”></script>

<script src=”http://Localhost:8000/CLodopfuncs.js? priority=1”></script>

这也是C-Lodop默认安装例子演示时,既可以让手机浏览器访问,也可以让电脑访问的神奇原因。如果希望页面的两个引用同时存在(不相互覆盖),则需要用url的参数name来区分,

例如:

    <script src='http://192.168.1.1:8000/CLodopfuncs.js?name=LODOPA'></script>

<script src='http://192.168.1.2:8000/CLodopfuncs.js?name=LODOPB'></script>

此时调用打印时,不再用LODOP这个默认的JS变量名,而是用LODOPA或LODOPB,二者分别向不同的云主机发打印指令,LODOPA指向192.168.1.1,而LODOPB指向192.168.1.2,以此类推。

https协议加载js文件

C-Lodop默认端口是8443(对应的Host地址也只能是域名,因SSL证书仅颁发给域名地址)。初次安装时,如果该默认端口被占用,端口值会自动加1,直到成功,所以https协议也可以使用双端口(8443和8444)引用主JS文件(忽略页面报错信息),格式如下:

       <script src="https://Host域名:8443/CLodopfuncs.js"></script>

       <script src="https://Host域名:8444/CLodopfuncs.js"></script>

结果问题来了,虽然脚本中加入了

http://localhost:8000/CLodopfuncs.js? priority=1

和外网访问的地址,防止谷歌浏览器跨域访问禁止的问题特意做了个解析,具体方法见之前的文章《CLodop打印控件谷歌浏览器新版本禁用跨域访问解决方法》

但是新的问题就是这样的预览页面打印时候调取的是服务器所在局域网内的打印机,没法调取外网本地打印机打印,于是从云打印控件的说明文档中获得解决方法,不用js脚本动态加载云打印js脚本,改为head中直接添加的方式

加载云打印JS文件的简单方法

    调用C-Lodop很简单,在页面head中 添加 如下路径的js文件,就可以向其发打印请求了,如下几个例子都可以在欢迎页面或Lodopfuncs.js这个样例文件里找到:      

       <script src="http://Host地址:8000/CLodopfuncs.js"></script>

<script src="http://Host地址:18000/CLodopfuncs.js"></script>

这里的蓝色部分是固定内容,Host地址是指安装C-Lodop的主机地址,可以是其IP地址或其域名,如果是本地(角色1)打印,该值用localhost、127.0.0.1或主机名代替,端口默认是8000、18000双端口(页面可以引用之一或同时引用),引用双端口的优势是当其中一个端口失效时,另一端口可继续工作,例如:

<script src=”http://192.168.1.1:8000/CLodopfuncs.js”></script>

<script src=”http://192.168.1.1:18000/CLodopfuncs.js”></script>

这样就优先加载本地的打印控件脚本了,然后就可以调取本地打印机打印了

似乎也同时解决了谷歌浏览器新版本禁止跨域访问Lodop打印控件的问题