突破微信二次分享JS接口安全域名限制5个的方法

        本人在实际工作中遇到通过手机浏览器访问一新闻网站,通过手机浏览器转发到微信平台,然后在微信中打开后再进行分享(微信分享二次),需求是需要二次分享的链接要显示自定义的logo。网上教程有很多,请自行解决。本文介绍的问题是如何突破微信公众号后台JS接口安全域名限制的问题。

        由于需要二次分享的网站涉及多个二级子域名,但是微信公众号后台只能提供5个域名,并且尝试过填写根域名abc.com,但是实际并不能使*.abc.com这种子域名生效。于是想到通过一个代理域名转发的方式来实现。

1.新建一个用于转发分享的域名如 share.abc.com,并配置在微信公众号的设置与开发-公众号设置-功能设置-JS接口安全域名中(占用一个安全域名名额)

2.新建一个代理转发服务器或者配置在原网站页面服务器,nginx编译时需增加 --with-http_sub_module模块,如果网站路径匹配比较复杂,可以使用支持正则的第三方模块,如

ngx_http_substitutions_filter_module。

nginx转发代码如下:

location /finance/ {
        subs_filter (/channel-home/ (/finance/channel-home/;
        subs_filter ="/channel-home/ ="/finance/channel-home/;
        subs_filter src="/console/js/share.js src="/finance/console/js/share.js;
        proxy_set_header Host finance.abc.com;
        proxy_set_header Referer http://finance.abc.com;   
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Accept-Encoding "";
        proxy_pass http://finance.abc.com/;
    }

上面代码以finance(财经)频道为例,将访问http://finance.abc.com/network/finance/....转发成

http://share.abc.com/finance/network/finance...

3.在页面里增加一段script代码用于判断(也可将此代码放到用于实现分享效果的js文件中),判断通过手机访问abc.com页面的,都跳转为share.abc.com,可以把此段代码编写到页面模板中,之后新发布的文章页面就会加入此代码。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Change URL</title>
    <script>
        var browser={
            versions:function(){
                var u = navigator.userAgent, app = navigator.appVersion;
                return {
                    trident: u.indexOf('Trident') > -1,
                    presto: u.indexOf('Presto') > -1,
                    webKit: u.indexOf('AppleWebKit') > -1,
                    gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,
                    mobile: !!u.match(/AppleWebKit.*Mobile.*/),
                    ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
                    android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1,
                    iPhone: u.indexOf('iPhone') > -1,
                    iPad: u.indexOf('iPad') > -1,
                    webApp: u.indexOf('Safari') == -1,
                    weixin: u.indexOf('MicroMessenger') > -1,
                    qq: u.match(/sQQ/i) == " qq"
                };
            }(),
            language:(navigator.browserLanguage || navigator.language).toLowerCase()
        }

        if(browser.versions.mobile||browser.versions.android||browser.versions.ios) {
            if (window.location.host != "share.abc.com") {
                var hostlist = window.location.host.split(".");
                var domain = hostlist[0]
                
                var uri = window.location.href.replace("http://" + window.location.host, '');

                var shareUrl = "http://share.abc.com/" + domain + uri;

                window.location.href = shareUrl;
            }
        }
    </script>
</head>
<body>

</body>
</html>

4.测试使用pc模式打开域名不变,使用手机端打开跳转http://share.abc.com...链接。通过此链接的微信二次分享由于设置了js安全域名,所以可以正常显示分享logo。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值