【问题标题】:onclick event not working in Safari?onclick 事件在 Safari 中不起作用?
【发布时间】:2011-08-14 21:08:54
【问题描述】:

无法弄清楚为什么除了 Safari 之外其他地方都可以使用? 我有这个 HTML:

<a href="javascript:;" class="tweet-btn" onclick="authenticateTwitter();">
<img src="img/sign-in-with-twitter.png" alt="">
</a>

还有这个 JS:

  <script type="text/javascript">
    var socialMediaServiceUrl = 
      // Staging
      "http://gameconnect.svc";

    var sessionFormat = "(S($))/";
    var sessionId;

    function format(s, value) {
      return s.replace("$", value);
    }

    function authenticateTwitter() {
      authenticate("Twitter");
    }

    function authenticateFaceBook() {
      authenticate("FaceBook");
    }

    function authenticate(applicationName) {
      $.ajax({
        url: format(socialMediaServiceUrl, "") + "/Authenticate?appName=" + applicationName,
        dataType: "jsonp",
        success: function (response) {
          sessionId = response.SessionId;
          window.open(response.Url);
        }
      });
    }
</script>

**编辑:Safari 的弹出框阻止了它,有什么解决方案可以阻止它?

【问题讨论】:

  • 尝试用 $(document).ready(function() { //... }); 包围你的函数并在单击该链接时检查 firebug 控制台
  • 哇,想通了。是 Safari 的弹出窗口阻止程序阻止了它。但是 Safari 没有给出任何警告,或者表明 Pop-Block 正在阻止某些事情。有什么好的解决方案吗??

标签: jquery safari cross-browser onclick


【解决方案1】:

这些更改是否修复它:

<a href="#" class="tweet-btn" onclick="authenticateTwitter(); return false;">
<img src="img/sign-in-with-twitter.png" alt="">
</a>

  <script type="text/javascript">
    var socialMediaServiceUrl = "http://gameconnect.svc"; // Staging
    /* IMPLICIT SEMICOLON INSERTION? */

    var sessionFormat = "(S($))/";
    var sessionId;

    function format(s, value) {
      return s.replace("$", value);
    }

    function authenticateTwitter() {
      authenticate("Twitter");
    }

    function authenticateFaceBook() {
      authenticate("FaceBook");
    }

    function authenticate(applicationName) {
      $.ajax({
        url: format(socialMediaServiceUrl, "") + "/Authenticate?appName=" + applicationName,
        dataType: "jsonp",
        success: function (response) {
          sessionId = response.SessionId;
          window.open(response.Url);
        }
      });
    }
</script>

【讨论】:

    【解决方案2】:

    试试看

    <a href="#" class="tweet-btn" onclick="authenticateTwitter();">
    <img src="img/sign-in-with-twitter.png" alt="">
    </a>
    

    <a href="javascript:authenticateTwitter();" class="tweet-btn">
    <img src="img/sign-in-with-twitter.png" alt="">
    </a>
    

    【讨论】:

      【解决方案3】:

      只需删除那个花哨的href="javascript:;" 属性,它应该可以工作。 或者定义为

       href="javascript:authenticateTwitter();"
      

      并删除 onclick。

      一个但不是两个都短。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-23
        • 1970-01-01
        相关资源
        最近更新 更多