首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >chrome.webstore.install调用这两个回调吗?为什么?

chrome.webstore.install调用这两个回调吗?为什么?
EN

Stack Overflow用户
提问于 2016-08-12 18:37:15
回答 1查看 448关注 0票数 4

我正在尝试使用函数内联加载Google扩展。

下面是我页面中的<head>节中的链接。

代码语言:javascript
复制
<link rel="chrome-webstore-item" 
     href="https://chrome.google.com/webstore/detail/oafp--redacted--ffencd" />

这是按钮。

代码语言:javascript
复制
<input type="button" class="btn btn-default" onclick="getExtension();">Go</input>

这里是Javascript,它就出现在关闭的</body>标记之前。

代码语言:javascript
复制
 <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的按钮将得到这一系列事件,一个接一个地传递。

  1. “调用安装”(在调用chrome.webstore.install()之前)
  2. “已安装”(在成功回调中)
  3. “扩展安装失败,未定义”(在失败回调中)
  4. “安装返回”(从调用chrome.webstore.install()返回后)

在其中的某个地方,异步地,我弹出了内联安装并接受它。

我以为..。

  1. 失败回调只应在失败时被调用。
  2. 失败的原因应该是有意义的,而不是undefined
  3. 成功的回调应该推迟到用户接受安装。

我肯定做错什么了。..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-12 18:45:02

答案:

在这一行代码中:

chrome.webstore.install(undefined, extensionInstalled(), extensionFailed());

您实际上是通过在extensionInstalled()extensionFailed()中使用extensionFailed()来执行函数的。如果要将它们作为回调传递,实际上可以像传递var那样传递函数本身。

chrome.webstore.install(undefined, extensionInstalled, extensionFailed);

作为变量的函数:

注释:--这不适用于您的代码,因为您在调用函数之前定义了它们,这是一个很好的实践。

您也可以将变量定义为函数,这只会使事情变得更加混乱。例如,这两个函数定义:

代码语言:javascript
复制
var myfunctionVar = function() {
    console.log('hello, world');
}

function myfunction() {
    console.log('hello, world');
}

您可以正常地调用这些函数(即myfunctionVar()myfunction())。

这两个定义之间的主要区别是,只有在定义本身被执行时,myfunctionVar才会变得可用,而在定义它的父函数的作用域中,myfunction是立即可用的(如果没有父函数,则执行脚本文件)。这是因为“吊装”,这只会使事情变得更复杂。

在本例中,您将无法在分配myfunctionVar()之前调用它。但是,调用myfunction()的情况并非如此,您可以在父函数中的任何地方调用它。

有关更多信息,请参见此答案。

函数有点复杂(而且功能强大!)在Javascript比其他语言,所以希望这个答案为您澄清了一些事情。在这里,你可以从W3Schools上读到有关提升的内容。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38924474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档