Processing.js没有'不允许在firefox中绑定外部javascript

Processing.js doesn't allow external javascript bind in firefox

本文关键字:firefox 绑定 外部 javascript 不允许 没有 js Processing      更新时间:2023-09-26

我正在尝试将数据发送到处理脚本。但由于某种原因,下面的变量pjs绑定到画布"competence1"并输入第一个if语句,但随后bindJavascript(this)-调用返回错误,但仅在firefox中返回。(适用于铬):

[pjs.bindJavascript不是函数]

var bound = false;
function initProcessing(){
    var pjs = Processing.getInstanceById('competence1');
        if (pjs != null) {
        // Calling the processing code method
        pjs.bindJavascript(this);
        bound = true;
        //Do some work
    }
    if(!bound) setTimeout(initProcessing, 250);
}

环境:Mac OS X-Lion;OBS!bindJavascript(this)-方法存在于画布标签

中加载的pde脚本中

通过将我的所有脚本封装在可变映射中,并使用第二种方法调用setTimeout,我可以跟踪每个状态并控制结果。

所以结束-->

var ex = {
    init : function(canId){
        var canId = canId;
        // check the if bound 
        // bind in this closure
        // set new timer
    }
} 

设置超时-->

setTimeout('ex.init("'+canId+'")', 2000); 

当然,添加参数,这样它就可以在自己的执行过程中保持该值。所以处理工作得很好,我应该更经常地使用闭包,这就是解决方案。

我也遇到了同样的问题。我使用了和你几乎相同的JS(这是我从Pomax教程中得到的),它运行得很好。然而,当我添加以下预加载指令(加载背景)时,我的initProcessing函数突然停止工作。

/* @pjs preload="metal_background.jpg"; */

错误消息相同:pjs.bindJavascript不是函数

在调试时,我可以看到pjs对象确实没有公开bindJavaScript函数,尽管在我的PDE文件中声明了一个函数。

事实证明,这完全取决于时机。。。预加载减缓了处理对象的初始化速度,因此在250毫秒循环的第二次循环中,pjs对象存在,但还没有bindJavaScript函数。

我不能100%确定Processing.js是如何构建这个对象的,但在这种情况下,一个简单的解决方案只是检查是否真的定义了bindJavaScript!我将代码更改为以下内容:

        var bound = false;
        function initProcessing() {
            var pjs = Processing.getInstanceById('mySketchId');
            if(pjs != null) {
                if(typeof(pjs.bindJavaScript) == "function") {
                    pjs.bindJavaScript(this);
                    bound = true;
                }
            }
            if(!bound) setTimeout(initProcessing, 250);
        }

在这之后,它工作得很好!