【问题标题】:Possible to append lines of code to Javascript script in the browser?可以将代码行附加到浏览器中的 Javascript 脚本吗?
【发布时间】:2019-10-07 03:40:55
【问题描述】:

我有一个 hello.js(它是 babelify 转译的反应代码)加载:

<script type="text/javascript" src="/static/js/hello.js"></script>

我想在它的末尾附加几行代码。这可能吗?

编辑:我要添加的行是:

var hello = _react["default"].createElement(Hello, {                             
  name: "World!!!"                                                                
});                                                                              

_reactDom["default"].render(hello, document.getElementById('hello'));

其中Hello_react_reactDom 都是在hello.js 中创建的对象。线条本身是任意的。我真正的问题是我可以将代码添加到浏览器中的现有脚本吗?

【问题讨论】:

  • 什么样的线?
  • 不知道你想要什么......
  • 是的,您可以在服务器端用一些新的代码行编写 js 文件,然后可以在浏览器中重新加载文件。检查这个stackoverflow.com/questions/585234/…
  • 那么设置构建脚本来添加代码行?
  • 不,不执行另一个ajax请求就无法读取脚本的内容,无法更改已经运行的脚本的内容,也无法更改之前的内容在客户端上运行。您可以使用 F12 开发工具在客户端更改它,然后使用更改后的脚本重新加载页面,但这当然只对您有用。

标签: javascript reactjs babeljs browserify


【解决方案1】:

导入 JavaScript 文件后,您可以使用(和修改)其公开的变量、函数等。

如果您的 hello.js 有一个暴露的变量,例如:

let hello = 'Hello'

文件导入后可以修改,例如:

<script src='hello.js'></script>
<script>
  console.log(hello); // prints 'Hello'
  hello = 'HELLO'
  console.log(hello); // prints 'HELLO'
</script>

【讨论】:

  • 这将是完美的,但我得到的只是ReferenceError: hello is not defined,除非我使用window 将其设为全局变量。
  • 问题的初始版本没有包括后来包含的整个上下文。当然,在我编写的示例中,hello 位于全局范围内,因此可以访问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
相关资源
最近更新 更多