我正在尝试编写一个书签,将JSONP调用添加到这样的页面中:

javascript:(function(){
var myFunction = (window.function(data){alert('my function is firing with arg' + data)});
var j = 'http://localhost/jsonscript.js';
var s = document.createElement('script');
s.src = j;
document.getElementsByTagName('head')[0].appendChild(s);
})();

附加到页面中的脚本src包含
myFunction('foo');

但是单击书签时出现错误-未定义myFunction。我如何“导出”该功能超出书签的范围,以便从附加的脚本标记中调用时起作用?

编辑:我发现我可以将脚本元素的innerHTML与原始JavaScript打包在一起。这可行,但是很丑。我仍然想找出一种更好的方法。

最佳答案

在窗口对象上定义函数:

window.myFunction = ...

对于JSONP请求,通常需要增加某种类型的计数器,即:
var counter = 1;
var myFuncName = "myFunction" + counter;
var j = 'http://localhost/jsonscript.js?callback=' + myFuncName;
window[myFuncName] = function (data) {...};

// remove function after timeout expires
setTimeout(function () { delete window[myFuncName] }, 5000);

07-24 09:38
查看更多