前言

近期使用React官方推荐的服务端渲染工具Next.js进行服务端页面编程时遇到引入百度分享等外部JS文件的问题。

Next.js可以使用内置组件来装在 <head> 到页面中

import Head from 'next/head'export default () =><div><Head><title>My page title</title><meta name="viewport" content="initial-scale=1.0, width=device-width" /></Head><p>Hello world!</p></div>

那么我们就可以用这个特性引入外部js文件了,下面是引入百度分享的例子:

import Head from 'next/head'export default () =><div><Head><title>My page title</title><meta name="viewport" content="initial-scale=1.0, width=device-width" /><script>{`             with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];`}</script>
</Head></div>

这样就很好解决了怎么引入类似百度分享一类的外部js文件的问题,但是百度分享自身会存在一个问题:百度分享异步操作加载进页面的时候不会立即渲染,因为因为百度分享执行后,会创建全局的window.__bd_share_main,所以 需要在 ajax请求完成后执行一下window.__bd_share_main.init();

但是由于window操作是客户端行为,而Next.js自身是服务端渲染(SSR)的原因是没有window对象的,解决办法是利用Next.js动态导入,官方文档有说明,动态导入是可以禁止SSR的,如下:

import dynamic from 'next/dynamic'const DynamicComponentWithNoSSR = dynamic(import('../components/hello3'), {ssr: false
})export default () =><div><Header /><DynamicComponentWithNoSSR /><p>HOME PAGE is here!</p></div>

像官方文档一样动态引入百度分享所在组件即可解决问题了

// 禁止ssr
const ShareCol = dynamic(import('../components/sharecol'),{ssr:false})

百度分享组件中,在componentDidMount钩子函数中操作如下

componentDidMount(){if(window._bd_share_main){         window._bd_share_main.init();}    }

其他类似的外部引入问题也可以这样解决

Next.js如何引入百度分享(外部引用)类似的外部js,以及如何操作window相关推荐

  1. js加载html的head偶尔失效,外部 js 文件偶尔会加载失败

    最近有一个很奇怪的问题一直困扰着我: html 页面中,head部分引入了几个外部js文件. 比如: // 目前页面结构就是这样,其他的代码都和此异常无关,就不多贴了. // 这里就直接报错,显示 V ...

  2. vue实例中调用外部js_vue中引入外部js方法实例

    我们在做vue项目时,经常会需要引入js,常用的有以下几种.本文主要和大家分享vue中引入外部js方法实例,希望能帮助到大家. 第一种import XX from "路径" Vue ...

  3. html中如何引入vue,vue.js怎样引入到HTML中,vue引入第三方js库

    vue.js怎样引入到HTML中如何将vue.js引入HTML,把vue.js引入HTML的方法:一.下载vue . js:然后在HTML中添加vue.js包,其语法为"script src ...

  4. JavaScript——JS的引入方式

    文章目录 JavaScript--我的第一个JavaScript程序以及JS的引入方式 初识JavaScript 我的第一个JS程序 JS的引入方式 外部引入方式 嵌入式 内部引用方式 行内引用 Ja ...

  5. JS延迟加载百度分享代码,提高网页速度

    相信大家经常在一些网站上看到有快捷分享到各大流行网站的按钮,目前流行的有JiaThis.百度分享.Bshare等,目前用百度分享的居多. 发现很多网站在放置百度分享代码的时候,简单的将分享代码放置到固 ...

  6. odoo openerp 分享-oe嵌入qweb】用js读取数据库数据,用类似html语言重写web报表

    [分享-oe嵌入qweb]用js读取数据库数据,用类似html语言重写web报表  (阅读 4403 次) 阿狸 新手上路 帖子: 26 人气: 1 开启阅读模式 [分享-oe嵌入qweb]用js读取 ...

  7. 百度分享share.js插件

    //百度分享window._bd_share_config = { common : { bdText : '分享标题', bdDesc : '分享描述', bdUrl : '分享链接', bdPic ...

  8. 百度分享支持https

    站点自从开启 https 之后 ,百度分享就不能用了!但是又寻找不到类似百度分享的替代品.. 怎么办呢?要如何解决 百度分享不支持https的问题呢, 跟着博主动动手,让你百度分享仍然能在https下 ...

  9. 百度分享--分享按钮的实现

     百度分享代码: <%@ page contentType="text/html;charset=UTF-8"%> <div class="bdsh ...

最新文章

  1. 软定时器的原理与创建
  2. 【面试招聘】程序员面试完全指南
  3. 岁月在流逝,从阿里退下来接近70后程序猿带给我的启示
  4. Linux命令----用户管理
  5. 【CodeForces - 270A】Fancy Fence (几何,思维,水题)
  6. linux间隔一定时间访问指定url
  7. WebConfig另类操作
  8. 外卖匹配系统_歧视外卖员的北京SKP是个什么东西?
  9. 项目质量管理--如何保证项目的质量
  10. 28.Linux/Unix 系统编程手册(上) -- 详述进程创建和程序执行
  11. VC运行库修复安装一键安装
  12. 一次 注册dll失败 的经历
  13. Android Studio使用技巧
  14. 我的母校照片~~``
  15. 直播入门(二)从视频采集到客户端播放
  16. 解决AMD Software提示图形驱动版本不匹配问题
  17. [Noip2003] 侦探推理
  18. ECCV 2022 | 适用于分类,检测,分割的生成式知识蒸馏开源
  19. Git之恢复修改的文件
  20. 【总结】反欺诈(Fraud Detection)中所用到的机器学习模型

热门文章

  1. 如何用CDR做出毛笔字效果
  2. 解决发邮件错误javax.mail.MessagingException: Could not connect to SMTP host
  3. 【二叉树专题】—— 相同的树、对称二叉树、二叉树的最大深度
  4. Confluence 小技巧(Tip) 宏
  5. 明日方舟骑兵与猎人活动良心来袭 叉叉助手挂机刷关搬奖池
  6. 爱客CRM:解决客户信息管理问题
  7. 【ASP.net文档】用C#实现HTTP协议下的多线程文件传输
  8. matlab变压器空载合闸,变压器空载合闸
  9. 理解MVC架构模式,SpringMVC原理、执行流程图解
  10. python 毕设 毕业设计 题目 课题 选题推荐