【问题标题】:Yelp 5 star reviews badge to open in new windowYelp 5 星评论徽章在新窗口中打开
【发布时间】:2013-06-12 16:08:06
【问题描述】:

我不知道如何将 target="_blank" 属性添加到 5 星评级徽章。

这是我插入网页的内容...来自 yelp。我将最后一行添加到脚本中以尝试添加属性,但它不会接受。但是,我可以让它在之前的 div 和之后的 img 上接受,而不是在锚标签上。

<div class="localsocialyelpreviews"><div id="yelp-biz-badge-fsc-N6ciVLIYpasN2FWN3Nxy9Q">Gina's Pizza & Pastaria</div><script type="text/javascript">
!function(doc, id){
  var js;
  var scriptElement = doc.getElementsByTagName("script")[0];
  if (!doc.getElementById(id)) {
    js = doc.createElement("script");
    js.id = id;
    js.src = "//dyn.yelpcdn.com/biz_badge_js/fsc/N6ciVLIYpasN2FWN3Nxy9Q.js";
    scriptElement.parentNode.insertBefore(js, scriptElement);
  }
} (document, "yelp-biz-badge-script-fsc-N6ciVLIYpasN2FWN3Nxy9Q");
$("div#yelp-biz-badge-fsc-N6ciVLIYpasN2FWN3Nxy9Q > a").attr("target","_blank");</script></div>

这就是最终发生的事情。没有目标属性:/

<div class="localsocialyelpreviews">
<div id="yelp-biz-badge-fsc-N6ciVLIYpasN2FWN3Nxy9Q"><a href="http://www.yelp.com/biz/ginas-pizza-and-pastaria-corona-del-mar"><img width="125" height="55" src="http://dyn.yelpcdn.com/extimg/fsc/N6ciVLIYpasN2FWN3Nxy9Q.png" alt="Gina's Pizza &amp; Pastaria"></a></div>
<p><script type="text/javascript">
!function(doc, id){
  var js;
  var scriptElement = doc.getElementsByTagName("script")[0];
  if (!doc.getElementById(id)) {
    js = doc.createElement("script");
    js.id = id;
    js.src = "//dyn.yelpcdn.com/biz_badge_js/fsc/N6ciVLIYpasN2FWN3Nxy9Q.js";
    scriptElement.parentNode.insertBefore(js, scriptElement);
  }
} (document, "yelp-biz-badge-script-fsc-N6ciVLIYpasN2FWN3Nxy9Q");
$("div#yelp-biz-badge-fsc-N6ciVLIYpasN2FWN3Nxy9Q &gt; a").attr("target","_blank");</script></p></div>

感谢任何见解。我尝试了许多不同的方法,并在 yelp 和 stackoverflow 中搜索了解决方案,但找不到答案。谢谢

【问题讨论】:

  • 我还尝试延迟加载脚本,因为我意识到 Yelp 徽章不会立即加载,并且可能会在我的脚本加载后加载。所以,没有成功,我也试过这个...... $(".localsociallyelpreviews").delay(5000).find('a').attr("target","_blank");

标签: javascript yelp


【解决方案1】:

修改 yelp 提供的脚本以在脚本加载后设置 target='_blank' 属性。添加这个(一定要插入您的 YELP 代码):

g.onload = function() {
    document.querySelector('#yelp-biz-badge-YOUR-YELP-CODE a').setAttribute('target', '_blank');
}

见下文:

<div id="yelp-biz-badge-YOUR-YELP-CODE">
    <a href="http://yelp.com/biz/YOUR-YELP-URL?utm_medium=badge_star_rating_reviews&amp;utm_source=biz_review_badge" target="_blank">
    Check out my biz on Yelp
    </a>
</div>
<script>(function(d, t) {
    var g = d.createElement(t);
    var s = d.getElementsByTagName(t)[0];
    g.id = "yelp-biz-badge-YOUR-YELP-CODE";
    g.src = "//yelp.com/biz_badge_js/en_US/YOUR-YELP-CODE.js";
    s.parentNode.insertBefore(g, s);

    g.onload = function() {
        document.querySelector('#yelp-biz-badge-YOUR-YELP-CODE a').setAttribute('target', '_blank');
    }

}(document, 'script'));
</script>

【讨论】:

    【解决方案2】:

    我不知道你是否还需要这个问题的答案,但我有同样的问题并且能够弄清楚。

    我不是 JavaScript 专家,但据我所知,默认的 Yelp! sn-p 重新排序所有脚本,使其远程脚本位于队列的最后;所以,即使你的行在 Yelp 代码之后,我认为你的“attr”修改行仍然在排队远程 Yelp 脚本运行之前,它实际上创建了你的锚 (&lt;a\&gt;) 对象'正在尝试修改。

    我能够为我自己的站点清理 sn-p,并将“attr”修改放入我站点的“onReady”函数中。我无法想象这会影响 Yelp 的行为!以任何方式编写脚本;它和 Yelp 的 sn-p 完全一样,只是它没有在 JavaScript 执行管道的末尾排队。

    <div id="yelp-link">
        <div id="yelp-biz-badge-script-plain-BlWbNrrOL4HJqwYcmr6SUw"></div>
        <script type="text/javascript" id="yelp-biz-badge-script-plain-BlWbNrrOL4HJqwYcmr6SUw" src="//dyn.yelpcdn.com/biz_badge_js/plain/BlWbNrrOL4HJqwYcmr6SUw.js">
        </script>
    </div><!-- #yelp-link -->
    

    ... 稍后在我的 functions.js 文件中:

    $(document).ready(function() {
       $("#yelp-link a").attr("target","_blank");
    });
    

    我希望这是有道理的,并且会有所帮助:-)

    【讨论】:

      【解决方案3】:

      几个月前我一直在寻找答案并放弃了 - 我的 js 技能还没有达到那个水平。但同样的问题又出现了,答案就在我眼前一闪而过——用我自己的透明链接盖住徽章。我将 yelp 脚本放在一个 div 中,并在脚本之后立即添加了我自己的链接。这是脚本之后的 html:

      <a href="http://www.yelp.com/biz/yourpage" target="_blank" class="yelp-button">My Yelp Page</a>
      

      和css:

      .yelp-button { background: transparent;
      display: block;
      height: 56px;
      width: 125px;
      position: absolute;
      top: 0;
      text-indent: -9999px;
      }
      

      【讨论】:

        【解决方案4】:

        我找到了修复 javascript 的直接方法,所以这实际上有效。

        (1):查看 yelp 为您的 Yelp 企业徽章/按钮提供的代码。将链接复制到脚本中引用的 *.js javascript 文件,并将本地副本保存在根目录中。你要修改它。

        (2):对于*.js文件的修改...在javascript的innerHTML行中,在href链接后添加如下代码:

        \u003ca target=\"_blank\"
        

        target=\"_blank\" 前面的 \u003ca 告诉 javascript 将 target="_blank" 放在 yelp 按钮的超链接/锚标记内。在 \u003e\u003cimg 文本之后写的任何内容都将出现在 yelp 按钮的图像标签中。

        因此,修改后的 yelp-javascript-file.js 的示例副本应该是这样的:

        var badge_element = document.getElementById("yelp-badge");
        badge_element.innerHTML = "\u003ca href=\"http://www.yelp.com\" \u003ca target=\"_blank\" \u003e\u003cimg alt=\"Yelp\" src=\"http://dyn.yelpcdn.com/extimg/genericYelpBizButton.png\" height=\"33\" width=\"88\"\u003e\u003c/a\u003e";
        

        (3):现在,在 Yelp 提供的代码中...确保它指向您修改后的 javascript 文件,而不是原始 javascript 文件。对于指向 Yelp 的简单按钮,代码如下所示:

        <div id="yelp-badge" title="Yelp Business Page">
        <a href="http://yelp.com">Check out Yelp</a></div>
        
        <script type="text/javascript">(function(d, t) {var g = d.createElement(t);var s = d.getElementsByTagName(t)[0];g.id = "yelp-badge-script";g.src = "yelp-javascript-file.js";s.parentNode.insertBefore(g, s);}(document, 'script'));</script>
        

        (最终结果):下面是脚本运行并出现按钮后加载的 html 的副本。是的...它在新窗口/新标签中打开。

        <div id="yelp-badge" title="Yelp Business Page">
        <a href="http://www.yelp.com" target="_blank">
        <img alt="Yelp" src="http://dyn.yelpcdn.com/extimg/genericYelpBizButton.png" height="33" width="88">
        </a>
        </div>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多