月度归档: 2023 年 2 月

  • Iframe 跨域高度自适应

    在页面中嵌入iframe子页面是很常用的方法,例如本站中的友情链接和朋友圈是嵌入的moments.shiyu.dev的页面,但是嵌入后的高度自适应问题就比较麻烦。

    一开始想直接在iframe加载完成后读取子页面的doc中body的高度,结果发现有跨域问题,无法获得子页面的具体信息,后面在网上寻找各种解决方案,有很多是没有用的,甚至直接没考虑跨域的,最后找到一种方便而且使用的方法:子页面发送消息给父页面,父页面监听消息。

    现在假设父页面(A.html)的代码如下:

    <iframe id="friends-frame" loading="lazy" src="https://moments.shiyu.dev/friends" name="moments" width="100%" onload="friendsFinish()" style="border: none;">
    </iframe>
    
    <script>
        const friendsFinish = function () {
            window.addEventListener('message', function (event) {
                var iframe = document.getElementById("friends-frame")
                iframe.style.height = event.data + 100 + "px";
            })
        }
    </script>

    父页面存在一个iframe标签加载https://moments.shiyu.dev/friends 这个子页面,而且父子页面不在同一个域上,所以父页面在加载完成iframe后创建事件监听,监听子页面发来的消息(高度)。

    子页面(B.html)的代码如下:

    <div>
      ********
    </div>
    <script>
    function friendsOnload(target) {
        let h = document.body.scrollHeight;
        parent.postMessage(h, target);
    }
    </script>

    B页面加载后执行friendsOnload函数,传入target(父页面的域) 发送当前页面的高度。

    这样就完成了不同域下iframe高度自适应啦。

    实例:链接&关于 – 云烟成雨 (shiyu.dev)

  • 爬山

    昨天和好朋友去爬了当地的小山,海拔大概400米,没有走正门的阶梯上山,爬的后山小道,因为是从来没走过的路,经常遇到绝壁只能返还另寻他路,所以上山路上折腾了比较久,超累。

    现在看着还是挺险的。

  • Moments Docker 发布

    昨天开发的朋友圈用起来感觉还不错,今天打包成了Docker 镜像推送到了官方仓库,使用如下命令可以一键部署:

    PS: 1.0版本存在大量性能问题,可以尝鲜使用,正在重构开发新版本

    docker run -d \
    	--name moments \
    	-p 3000:80 \
    	-v moments:/app \
    	drizzle2001/moments:1.0

    运行后开放 3000 端口访问您的ip:3000即可查看啦。

    后台的地址为:ip:3000/admin

    默认密码为:lantin

    修改密码的方式是进入挂载的 moments 储存卷,找到根目录中的appsetting.json里面修改即可。

    关于自动采集,可以设置定时任务访问:ip:3000/gather/token

    token可以在appsetting.json中查看和修改~

    如果有疑问可以联系我,免费提供部署帮助。

    当前版本仅供尝鲜,设计上还有很多问题,代码仓库在github,部署成功后可以在后台看到仓库地址

  • 朋友圈

    前言

    前段时间发现了个站商店这个网站就被它的一些功能深深打动了,其中最喜欢的就是RSS订阅功能,像朋友圈一样方便可以关注其他博客,接受其他博客推送的RSS,但是站长没有开发阅览功能,推送的RSS还是要点击到博主的博客才可以看到。可能这也是对博主流量的尊重吧。

    问题来了

    现在我的博客友链已经多大45个了,每次想逛逛博客真的很麻烦,有时候也会错过博友新发的文章,市面上的Rss工具也不是很好用或是界面难看或是操作不习惯,就想自己开发一个朋友圈程序,可以订阅我的博友们的博客,没提供rss的我也可以写爬虫来阅读,这样就很方便啦。

    开工!

    那么使用什么来做呢,最后选择了用C#和blazor框架开发,因为新的.net7提供的custom elements可以方便把程序嵌入到任何网站中,可以为后面的软件扩展做准备。

    先来看看目前开发的样子吧:https://moments.shiyu.dev/

    首页会显示博友最新的文章,点击后可以弹出一个全屏的模态框用来阅览,当然不提供content rss的博主,这里只会抓取简介,不会爬取博主的全文,在底部有查看原文功能可以快速跳转到博主的文章页面。

    阅览部分加了markdown css做文章阅览的美化,后面可能会做一些api可以实现友链管理和rss分享商店?