Javascript:从自调用匿名函数/立即调用函数表达式(IIFE)中调用全局函数

时间:2015-03-05 15:44:33

标签: javascript jquery

我正在尝试创建Chrome扩展程序。我的内容脚本中有以下功能来处理文件下载:

function handleDownloadFile(urlVal){
    console.log("handleDownloadFile called");
}

然后我有以下代码将一个函数注入到DOM中(取自这里:https://stackoverflow.com/a/11811558/3778854):

function injectScript(source) {
    var elem = document.createElement("script"); //Create a new script element
    elem.type = "text/javascript"; //It's javascript
    elem.innerHTML = source; //Assign the source
    document.documentElement.appendChild(elem); //Inject it into the DOM
}

injectScript("("+(function(window) {
    // functions here
    console.log("successfully injected content script"); // works
    function foo(url){
        $("#downloadPdfButton").click(handleDownloadFile(url));
    }
    foo("http://url.com/doc.pdf"); // breaks here        
}).toString()+")(window)");

在调用foo("http://url.com/doc.pdf")时,会断言handleDownloadFile是未定义的。如您所见,我甚至尝试传递window,然后将window.handleDownloadFile(url)设置为点击事件处理程序,但没有成功。

我希望有人可以给我一些指示,如果可能的话。

1 个答案:

答案 0 :(得分:-1)

在声明handleDownloadFile时可以试试这个 -

window.handleDownloadFile = function(urlVal){
    console.log("handleDownloadFile called");
}