2016-10-01 59 views
0

我遇到下面的脚本有问题。我得到toSource未在Chrome中定义的错误,并发现toSource()是Firefox特定的。我试过JSON.stringify(),而我得到了未定义的错误。Chrome中的JavaScript Function.prototype.toSource()无法正常工作

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 
} 
+0

没有内部函数'seFilterGrid'内定义的'toSource' – brk

+3

请复习[*我如何提出一个好问题?*](/ help/how-to-ask)您的目标是什么?你想要什么样的最终结果? “JSON.stringify”的输出有什么特别的问题? –

+0

@ user2181397:toSource是一个内置的firefox插件!我想要使​​用它的铬相当于它 – user3383301

回答

1

虽然你的问题是不明确的,看来你正在寻找的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的生产站点上使用它:它不适用于每个用户。实现之间也可能存在很大的不兼容性,并且行为在未来可能会发生变化。

+0

感谢人工作:) – user3383301