【问题标题】:How to dynamically create javascript file in Browser如何在浏览器中动态创建 javascript 文件
【发布时间】:2017-01-26 08:48:30
【问题描述】:

我最近开始探索 Browserify 以捆绑 Node 模块并在浏览器中使用它们。它很整洁,效果很好,但是我希望改进工作流程。在我的用例中,我有一个 script.js 文件,它需要像 Cylon 这样的节点模块。

为简洁起见,script.js 类似于:

"use strict";

var Cylon = require('cylon'); 
Cylon.robot({
    name: "BrowserBot",

    connections: {
      arduino: { adaptor: 'firmata', port: '/dev/tty.usbmodem1411' }
    },

    devices: {
      led: { driver: 'led', pin: 8 }
    },

    work: function(my) {
      Cylon.Logger.info("Hi, my name is " + my.name)

      every((2).seconds(), function() {
        Cylon.Logger.info("Toggling the LED");
        my.led.toggle();
      });
    }
  });

Cylon.start();

我正在查看 browserify 生成的 bundle.js 文件,我可以找到上面提到的确切代码块,并且我认为节点进程是使用此代码和一些绑定启动的。我希望script.js 文件是动态的,以允许用户在 LED 上使用不同的引脚或任何其他小的更改。由于我没有更改此文件的任何依赖项,因此我应该能够将bundle.js 中的该块替换为script.js 文件的新内容,因为其他模块已经加载并捆绑在bunndle.js 中,对吗?

我想知道这在浏览器设置中是否可行。 Chrome 应用程序允许file Storage,因此我可以在初始创建后动态生成bundle.js,我只需插入script.js 的内容并将bundle.js 加载到HTML 文件中?我该怎么办?

虽然这个问题不是 Cylon 特有的,但我仍将其添加为我的特定用例的标签。

【问题讨论】:

  • 不确定您的问题是什么。这个bundle.js 在应用程序中是如何使用的?是什么阻止您制作一些接受参数的接口?
  • 嘿@Xan! bundle.js文件是通过browserify生成的。所以一堆节点模块被编译并存在在那里。所以,Cylon 模块和所有其他firmata 适配器之类的东西都在bundle.js 中。但是因为script.js 可以是任何与arduino 相关的代码。我不确定如何将其作为参数构建到 bundle.js 中?

标签: javascript html browserify google-chrome-app cylon.js


【解决方案1】:

所有 .js 文件都应在 Apps manifest.json 中指定。我认为您不能编辑应用文件夹中的项目(即使通过文件存储访问它)

【讨论】:

  • 希望您能理解我的问题。我可以不使用 chrome.fileStorage API 保存 js 文件,然后编辑它们并以某种方式将它们注入 DOM 或 App 中吗?
  • @VivekPradhan 这会很迂回:要执行编辑过的 JS,你需要使用沙箱,因为 Chrome 应用程序有一个强制 CSP 禁止内联/评估代码。
  • @Xan,我的目标是使用 chrome 应用程序使某种 IDE 成为一种非常简单的 IDE。那我该如何沙箱呢?想不出允许我将编辑后的 ​​js 注入浏览器的策略,因为我对所有内容都使用节点模块。我想用 js 来完成这项工作。 ://
  • 应用无法将anything注入浏览器本身;但它可以注入到<webview> 中加载的网页内容中。
  • 对。因此,如果我将所有 javascript 作为<script> 标签之间的字符串加载到 DOM 中,那么我可以即时修改 javascript 对吗?我不能使用 chrome 文件 api 做某事吗?就像将文件保存在浏览器中一样,它是否由后台脚本更改或更新,然后在更改时将其重新加载到 dom 中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多