我的以下脚本有问题。我在Chrome中收到未定义toSource的错误,发现toSource()是Firefox专用的。我尝试使用JSON.stringify(),但出现了未定义的错误。

var main_tbls = d.querySelectorAll(".bz_buglist");
var first_tbl = main_tbls[0];
first_tbl.id = "bugz_table";
var ext_script = d.createElement("script");
//ext_script.setAttribute("src", "http://www.javascriptkit.com/script/script2/tablefilter.js");
ext_script.setAttribute("type", "text/javascript");
ext_script.setAttribute("language", "javascript");
ext_script.appendChild(d.createTextNode("var TblId, SearchFlt, SlcArgs;TblId = new Array(), SlcArgs = new Array();var colValues = new Array();" +
    setFilterGrid.toSource() +
    AddGrid.toSource() ));
d.body.appendChild(ext_script);


function setFilterGrid(id)
{
    var tbl = grabEBI(id);
    var ref_row, fObj;
    if (tbl != null && tbl.nodeName.toLowerCase() == "table") {
        if (arguments.length > 1) {
            for (var i = 0; i < arguments.length; i++) {
                var argtype = typeof arguments[i];

                switch (argtype.toLowerCase()) {
                    case "number":
                        ref_row = arguments[i];
                        break;
                    case "object":
                        fObj = arguments[i];
                        break;
                } //switch

            } //for
        } //if

        ref_row == undefined ? ref_row = 2 : ref_row = (ref_row + 2);
        var ncells = getCellsNb(id, ref_row);
        tbl.tf_ncells = ncells;
        if (tbl.tf_ref_row == undefined) tbl.tf_ref_row = ref_row;
        tbl.tf_Obj = fObj;
        if (!hasGrid(id)) AddGrid(id);
    } //if tbl!=null
}

最佳答案

虽然您的问题不清楚,但似乎您正在寻找Function.prototype.toString()方法。这将在basically all browsers中起作用。



document.body.innerHTML =  '<pre>' + setFilterGrid.toString() +'</pre>';


function setFilterGrid(id)
{
    var tbl = grabEBI(id);
    var ref_row, fObj;
    if (tbl != null && tbl.nodeName.toLowerCase() == "table") {
        if (arguments.length > 1) {
            for (var i = 0; i < arguments.length; i++) {
                var argtype = typeof arguments[i];

                switch (argtype.toLowerCase()) {
                    case "number":
                        ref_row = arguments[i];
                        break;
                    case "object":
                        fObj = arguments[i];
                        break;
                } //switch

            } //for
        } //if

        ref_row == undefined ? ref_row = 2 : ref_row = (ref_row + 2);
        var ncells = getCellsNb(id, ref_row);
        tbl.tf_ncells = ncells;
        if (tbl.tf_ref_row == undefined) tbl.tf_ref_row = ref_row;
        tbl.tf_Obj = fObj;
        if (!hasGrid(id)) AddGrid(id);
    } //if tbl!=null
}





另一方面,Function.prototype.toSource()only available in Firefox。 Mozilla的文档非常清楚,它是:


  非标
  此功能是非标准的,不在标准轨道上。不要在面向Web的生产站点上使用它:它不适用于每个用户。实现之间也可能存在很大的不兼容性,并且将来的行为可能会更改。

关于javascript - Chrome中的JavaScript Function.prototype.toSource()无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39803821/

10-12 15:31