作用域 - 调用在书签小程序中创建的函数
我正在尝试编写一个书签小程序,它会向页面添加这样的 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);
})();
脚本源添加到页面中时包含的内容
myFunction('foo');
但是当我点击书签小工具时出现错误——myFunction 未定义。我如何将该函数“导出”到书签小工具的作用域之外,以便当从追加的 script 标签调用时它可以工作?
编辑:我发现我可以直接将 script 元素的 innerHTML 填充为原生的 JavaScript。这可以使用,但很丑。我仍然希望能找到更好的方法。
答案#1
在 window 对象上定义函数:
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);
