为啥在运行时添加 <script> 标签不会加载 javascript 文件? (使用 react.js)

Posted

技术标签:

【中文标题】为啥在运行时添加 <script> 标签不会加载 javascript 文件? (使用 react.js)【英文标题】:Why adding a <script> tag at runtime doesn't load the javascript file? (with react.js)为什么在运行时添加 <script> 标签不会加载 javascript 文件? (使用 react.js) 【发布时间】:2014-04-28 18:37:08 【问题描述】:

我有这个 react.js 脚本,它将以下代码添加到 html

// returned by the render method
React.DOM.div(
    dangerouslySetInnerHTML:  
        __html: '<script type="text/javascript" async="" src="//myapp.disqus.com/embed.js"></script>'
    
)

现在我的 html 看起来像:

<script type="text/javascript" async="" src="//myapp.disqus.com/embed.js"></script>

这看起来很完美,但问题是它没有加载脚本。 script 标签被插入到 body 的中间,嵌套在其他一些 div 标签中。

可能是什么问题? 谢谢

【问题讨论】:

相关页面对我没有帮助,因为我正在加载外部文件。我将如何对其进行评估? @user3446254,向下滚动一点 :-) ***.com/a/7054216/1074592 React.js 中的脏解决方案class XScript extends React.Component static initScripts(el, url) var script = document.createElement('script') script.setAttribute('type', 'text/javascript'); script.setAttribute('src', url); el.appendChild(script); componentDidMount() XScript.initScripts(React.findDOMNode(this.refs['it']), this.props.url); render() return &lt;div ref="it" dangerouslySetInnerHTML=__html: '&lt;script type="text/javascript" src="'+this.props.url+'"&gt;&lt;/script&gt;'&gt;&lt;/div&gt; 这不应被标记为重复,因为它特定于 ReactJS - 其他答案在 ReactJS 中不起作用 希望这可以重新打开。 【参考方案1】:

您测试了哪种浏览器?如果您在脚本标签中使用 async="true",它不会阻塞。但目前只有几个浏览器支持。

【讨论】:

问题不在于阻塞与否,问题在于根本没有请求文件。 您解决了吗?我对 reactjs 有同样的问题【参考方案2】:

使用 react 将脚本标签呈现到页面不是正确的解决方案 - 我无法让它与 JSX 一起使用,我假设这里同样适用。不知道为什么,但只需以普通的旧 javascript 方式添加它:

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

    script.src = "//myapp.disqus.com/embed.js";
    script.async = true;

    document.body.appendChild(script);

将它放在根组件的 componentWillMount 中。

【讨论】:

【参考方案3】:

我昨天刚刚将 Disqus 添加到我的 React 应用程序中。我使用了“react-disqus-thread”模块并立即启动并运行它。

在github上:https://github.com/mzabriskie/react-disqus-thread

和 npm:https://www.npmjs.com/package/react-disqus-thread

该组件采用以下道具:

短名称 - 这是 //myapp.disqus.com/embed.js 中的“myapp” 标识符 - 一个唯一的 blogId,可以在 url 更改时识别您的博客文章 标题 url - 如果你不提供这个,模块会检测到这个url并提供它。

【讨论】:

以上是关于为啥在运行时添加 <script> 标签不会加载 javascript 文件? (使用 react.js)的主要内容,如果未能解决你的问题,请参考以下文章

为啥浏览器不在通过 fetch API 检索的 HTML 片段中运行 <script>? [复制]

为啥用 document.write() 写 <script> 标签时要拆分它?

将外部 JS 引擎添加到 Eclipse 运行时以在 Java 15 中使用 Eclipse Java 编译器和 Ant 中的 <script>

为div设置背景图片后,为啥不显示背景图片?

为啥浏览器使用 content-type json 执行 <script>?

为啥在C#中用Response.Write("<script>alert('内容')</script>")时,当弹出提示框是,网页其