我正在尝试使用the chrome.webstore.install( link, success, fail)
function内联加载Google Chrome扩展程序。
以下是我的网页<head>
节中的链接。
<link rel="chrome-webstore-item"
href="https://chrome.google.com/webstore/detail/oafp--redacted--ffencd" />
这是按钮。
<input type="button" class="btn btn-default" onclick="getExtension();">Go</input>
这是Javascript,它出现在结束</body>
标记之前。
<script type="text/javascript">
function getExtension() {
function extensionFailed(reason) {
console.log("extension Install Failed:", reason);
}
function extensionInstalled() {
console.log("installed");
};
console.log("calling install");
chrome.webstore.install(undefined, extensionInstalled(), extensionFailed());
console.log("install returned");
};
</script>
点击调用getExtension的按钮可以获得这一系列事件,并立即一个接一个地传递。
chrome.webstore.install()
之前)chrome.webstore.install()
后)在中间的某个地方,异步,我得到内联安装弹出窗口并接受它。
我以为......
undefined
。我一定是做错了。 ......
答案 0 :(得分:4)
<强>答案:强>
在这行代码中:
chrome.webstore.install(undefined, extensionInstalled(), extensionFailed());
您实际上是通过()
和extensionInstalled()
中的extensionFailed()
来执行这些功能。如果你想将它们作为回调传递,你实际上可以像var
一样传递函数:
chrome.webstore.install(undefined, extensionInstalled, extensionFailed);
作为变量的函数:
注意:这不适用于您的代码,因为您在调用它们之前定义了这些函数,这是一种很好的做法。
您还可以将变量定义为函数,IMO只会让事情变得更加混乱。例如,这两个函数定义:
var myfunctionVar = function() {
console.log('hello, world');
}
function myfunction() {
console.log('hello, world');
}
您可以通常的方式调用这些函数(例如myfunctionVar()
和myfunction()
)。
这两个定义之间的主要区别在于myfunctionVar
只有在定义本身执行后才可用,而myfunction
在定义它的父函数范围内立即可用(或者一旦你的如果没有父函数,则执行脚本文件)。这是由于“吊装”,这只会使事情变得更加复杂。
在此示例中,您无法在分配myfunctionVar()
之前调用它。但是,这不是调用myfunction()
的情况,您可以在父函数中的任何位置调用它。
See this answer for a more information.
Javascript中的函数比其他语言中的函数更复杂(也更强大!),所以希望这个答案可以为您清除一些内容。 You can read about hoisting from W3Schools, here.