无法将模块功能传递给Page

着陆器

我有一个util方法getMutedColor和其他一些模块getMutedColor依赖于rand同一模块中的另一个

page.includeJs('https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.10/d3.min.js', function() {
    var util = require('./util');
    var svg = page.evaluate(pageContext.pageExec, data, meta, util);
    /** ... **/
}

我可以util.getMutedColor()在这个范围内调用,但是在我的pageContext.pageExec函数中util.getMutedColor不再存在。util参数仍然是一个对象,但是我无法调用任何导出的方法:

TypeError:“未定义”不是函数(正在评估“ util.getMutedColor()”)

有没有办法将自包含模块传递给页面?

Artjom B.

不,这是不可能的。如在文档中所示

注意:参数和评估函数的返回值必须是一个简单的原始对象。经验法则:如果可以通过JSON序列化,那就很好。

您传递来评估的函数必须是独立的,并且传递的数据不能包含使用创建的函数或对象new那些被剥夺了。

这意味着您必须将util对象完全复制pageExec函数中。

如果util太大而无法复制,或者您使用的多个功能util,则可以尝试其他操作:

  1. 序列化函数,并将它们作为字符串传递给评估回调,在其中您可以实例化它们new Function(string)并将其绑定到util对象。

    var funcNames = [];
    for(var prop in util) {
        if (util.hasOwnProperty(prop) && typeof util[prop] === "function") {
            funcNames.push(prop);
            util[prop] = util[prop].toString();
        }
    }
    util.__funcNames = funcNames; // make it a property of util
    page.evaluate(pageContext.pageExec, data, meta, util);
    

    并且在pageContext.pageExec

    util.__funcNames.forEach(function(funcName){
        util[funcName] = new Function(util[funcName]);
    });
    
  2. 只有一个pageContext包含所有内容的函数,您可以使用switch case每次传递的参数evaluate来选择单个pageContext函数内部的正确函数。

  3. 使用page.injectJs注入工具集。有必要通过检查是否window存在类似以下内容来为utils命名空间

    var util = {...};
    if (window) {
        window.util = util
    } else if(module) {
        module.exports = util;
    }
    

    可能存在更好的脚本,具体取决于环境。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法将模块功能传递给Page

来自分类Dev

无法将功能传递给ReactJS中的子组件

来自分类Dev

无法将响应表单Facebook传递给其他功能

来自分类Dev

将内容传递给Python中另一个模块的功能

来自分类Dev

将参数传递给模块的匿名函数

来自分类Dev

将python模块传递给函数

来自分类Dev

将参数传递给Verilog模块

来自分类Dev

将代码引用传递给外部模块

来自分类Dev

将依赖项传递给模块angular

来自分类Dev

无法似乎执行传递给变量的功能

来自分类Dev

Python-无法将元组作为参数传递给另一个模块

来自分类Dev

Terraform-无法将字符串变量传递给子模块

来自分类Dev

VBA将表单控件传递给功能

来自分类Dev

React:将功能传递给子组件

来自分类Dev

Aurelia将配置传递给插件或功能

来自分类Dev

将“ e”传递给新功能-javascript

来自分类Dev

将按钮ID传递给功能

来自分类Dev

如何将功能传递给组件?

来自分类Dev

将参数传递给功能组件

来自分类Dev

将React Hook传递给功能组件

来自分类Dev

将功能传递给jQuery键事件?

来自分类Dev

将参数传递给点击功能

来自分类Dev

将功能参数传递给Pig

来自分类Dev

将postgres连接传递给多个功能

来自分类Dev

将功能传递给角度指令

来自分类Dev

将列表列表传递给功能

来自分类Dev

将参数传递给Boost线程功能

来自分类Dev

Google地图,将地图传递给功能

来自分类Dev

无法将多值选择器的结果传递给CONTAINS功能