Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌登录按钮没有';如果父元素被隐藏,则不能在Firefox中加载_Javascript_Html_Firefox_Google Openid - Fatal编程技术网

Javascript 谷歌登录按钮没有';如果父元素被隐藏,则不能在Firefox中加载

Javascript 谷歌登录按钮没有';如果父元素被隐藏,则不能在Firefox中加载,javascript,html,firefox,google-openid,Javascript,Html,Firefox,Google Openid,我正在使用Google登录JavaScript客户端动态创建一个G+登录按钮。 代码如下所示: <div id="googleSignInButton"> <span class="g-signin" data-scope="openid email" data-clientid="{{flow.client_id}}" data-redirecturi="{{flow.redirect_uri}}" da

我正在使用Google登录JavaScript客户端动态创建一个G+登录按钮。 代码如下所示:

<div id="googleSignInButton">
    <span class="g-signin"
        data-scope="openid email"
        data-clientid="{{flow.client_id}}"
        data-redirecturi="{{flow.redirect_uri}}"
        data-accesstype="offline"
        data-cookiepolicy="single_host_origin"
        data-callback="googleLoginCallback"
        data-approvalprompt="force">
    </span>
</div>

它很好用。但在一种特定情况下,它不会加载。 当使用firefox并隐藏其父元素(display:none)时,当显示其父元素时,它根本不会显示

例如,检查JSFIDLE(检查html注释):


在Firefox上运行时,如果加载google API时元素“不可见”,它将直接以元素的样式将宽度和高度属性设置为1px。不可能通过CSS更改它

一种解决方案是在使元素可见后显式初始化API。您可以使用
go
方法执行此操作

<script >
  window.___gcfg = {
    lang: 'en-US',
    parsetags: 'explicit' //Configure to initialize explicitly
  };
</script>
<script src="https://apis.google.com/js/platform.js" async defer></script>
检查这个
有一个工作示例。

它在最初隐藏时被分配了1px的宽度和高度。我尝试设置宽度/高度,但最终没有任何区别。
var $ = document.querySelector.bind(document);

function showHide() {

  var login_panel = $("#login_panel");
  console.log(login_panel);
  var display = login_panel.style.display === "none" ? "block" : "none";
  login_panel.style.display = display;
  gapi.signin.go(login_panel); //Initialize the API after the element becomes visible.
}