【问题标题】:Import .js file as text and use it inside WebView injectedJavaScript in react-native expo将 .js 文件作为文本导入并在 react-native expo 中的 WebView 中使用
【发布时间】:2019-07-23 18:15:21
【问题描述】:

我有一个文件 content.js,其中包含一些我想使用 injectedJavaScript 注入到 WebView 中的 JavaScript 代码。

我试过了:

    fetch('./content.js').then((result) => {
      result = result.text();
      this.setState(previousState => (
        {contentScript: result}
      ));
    });

但它没有得到正确的文件。

const contentScript = require('./content.js');

这行得通,但它会立即对 JavaScript 进行评估,我似乎找不到在执行之前将其转换为字符串的方法。

一种解决方案是将content.js 的代码复制到一个字符串中,但是当我想编辑代码时这会很烦人...

有没有人知道更好的解决方案?
近一个星期我仍然没有解决这个问题。 :(

【问题讨论】:

  • 将文件加载规则添加到 webpack 并定位此文件
  • @deathangel908 你能解释一下吗?我还想补充一点,我正在使用 EXPO。

标签: javascript react-native webview expo


【解决方案1】:

由于 expo 使用webpack,您可以自定义它。 Webpack 有一个您可能感兴趣的loaders 部分。您需要的加载程序称为raw-loader。所以当你需要一些文件时,webpack 会针对它在配置中的加载器链运行这个文件。默认情况下,所有.js 文件都捆绑到index.js 中,当您运行您的应用程序时会执行这些文件。相反,您需要 raw-loader 的确切内容。它会插入类似的东西

module.contentScript = function() { return "console.log('Hello world!')"}

代替:

module.contentScript = function() { console.log('Hello World'}}

所以你需要:

npm install raw-loader --save-dev

在您的代码中:

require('raw-loader!./content.js');

【讨论】:

  • 你的答案似乎是解决方案,但我在使用require('raw-loader!./content.js')时得到Unable to resolve "raw-loader!./content.js" from "App.js"
  • 你安装 raw-loader 了吗?尝试在 webpack.conf 中硬编码文件名,尝试使用路径,例如不是指定当前组件的相对路径,而是指定项目根目录或相对于系统根目录的相对路径。尝试定位与 js 不同的文件类型。例如文本文件。很难说到底出了什么问题。不过应该开箱即用。
  • 很遗憾我无法让它工作......如果我只指定./content.js,它会检测到文件,但raw-loader!./content.js 不起作用。 Unable to resolve module !!raw-laoder!./content.js from F:\\Projects\\x\\x\App.js: Module !!raw-loader!./content.js does not exist in the Hase module map.
  • 还有一个问题,除了安装webpack之外,你还需要安装和运行其他任何东西吗?我是以某种方式运行它还是什么?我没用过……
  • 只安装raw-loader 就可以了。
猜你喜欢
  • 2017-10-10
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
  • 2020-10-20
  • 1970-01-01
相关资源
最近更新 更多