【问题标题】:Twitter share button - need the HTML explainedTwitter 分享按钮 - 需要 HTML 解释
【发布时间】:2016-03-31 12:36:29
【问题描述】:

我最近在我的随机报价生成器 (http://conn3cted.uk.tn/quote.html) 中添加了一个分享按钮,它可以工作:-)

为了完成这项工作,我必须添加两件事,一是在我的 HTML 文件中,一是在我的 Javascript 文件中...

Javascript

twttr.widgets.createShareButton(
    // Do not share a URL
    " ",
    // Div where the share button should be inserted
    document.getElementById('tweetButton'),
    {
        // Define the tweet that will be used
        text: "'" + $(".quoteContent").text() + "'" +
        $(".quoteTitle").text(),
        // Set the size of the Twitter share button
        size: "large",
    }
);

HTML

<script>window.twttr = (function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0],
    t = window.twttr || {};
  if (d.getElementById(id)) return t;
  js = d.createElement(s);
  js.id = id;
  js.src = "https://platform.twitter.com/widgets.js";
  fjs.parentNode.insertBefore(js, fjs);

  t._e = [];
  t.ready = function(f) {
    t._e.push(f);
  };

  return t;
}(document, "script", "twitter-wjs"));</script>

我很沮丧,因为我无法弄清楚 HTML 位实际上做了什么......

【问题讨论】:

  • 解释你的问题,以及预期的输出?
  • 这可能是因为它不是 HTML。它是 JavaScript。
  • HTML 部分只是一个带有一些 JavaScript 的 script 标记。你是在问那个 JavaScript 代码是做什么的吗?它似乎是在 window 对象上设置 twttr 属性。是否有特定的代码行不清楚?
  • 我认为您的 javascript 文件未正确包含,因此 html 部分可以正常工作
  • 对不起,伙计们 - 我真的没有把我的问题说清楚!一切正常,我只是不明白 HTML 位实际上做了什么。

标签: javascript jquery html twitter


【解决方案1】:

“HTML”部分创建一个&lt;script&gt; 以从https://platform.twitter.com/widgets.js 加载twitter 小部件库。它将创建的 &lt;script&gt; 元素放在所有脚本之前。

你可以在开发者工具中看到结果:

如果您需要更多解释,请告诉我。

更新

好的,一步一步来。查看第一行和最后一行:

<script>window.twttr = (function(d, s, id) {
...
}(document, "script", "twitter-wjs"));</script>

声明一个函数并立即调用它是 JavaScript 中的一种常见模式。这就是这里发生的事情。第一行是 function 的声明,它接受 3 个参数:dsid。在最后一行,使用实际参数document"script""twitter-wjs" 调用声明的函数。此外,函数的结果被分配给window.twttr 变量。

现在让我们进入函数内部:

var js, fjs = d.getElementsByTagName(s)[0],
    t = window.twttr || {};

上面的 2 行声明了 3 个变量:

  • js - 此时未定义
  • fjs - 等于页面上的第一个 &lt;script&gt; 元素(将 ds 替换为实际参数值,您将得到:document.getEelmentsByTagName("script")[0]
  • t - 等于 window.twttr 如果之前定义或为空对象 {}

下一行是对 twitter 小部件库的多个包含的保护:

if (d.getElementById(id)) return t;

如果带有id="twitter-wjs" 的元素已经存在,则返回,即中断函数的执行。如果它不存在,那么继续前进:

js = d.createElement(s);
js.id = id;
js.src = "https://platform.twitter.com/widgets.js";

这 3 行创建了一个 &lt;script id="twitter-wjs" src="https://platform.twitter.com/widgets.js"&gt;&lt;/script&gt; 标记。

下一行插入创建的&lt;script&gt; 作为文档中包含第一个&lt;script&gt; 的元素的第一个子元素:

fjs.parentNode.insertBefore(js, fjs); 

以下 3 行:

t._e = [];
t.ready = function(f) {
  t._e.push(f);
};

初始化一个队列,您可以将函数放入其中,一旦加载了 twitter 小部件,它们就会被调用。你可以这样使用它:

twttr.ready(function() {
    twttr.widgets.createShareButton(...);
});

最后一行返回 t 变量作为函数的结果。

return t;

【讨论】:

  • 感谢您的回复 ;-) 那么 HTML 只是加载一个 twitter 小部件,以便我可以使用 JS 'createShareButton' 功能(例如)?我很想知道 HTML 到底在做什么——我知道它是一个函数,但我不明白大多数(或任何)行实际上在做什么。在学习新事物时,我热衷于在非常精细的层面上掌握它正在做的事情,所以它会在以后帮助我。
  • 嘿@user6038747,看看我更新的答案。我逐行解释了代码。
  • 那是完美的@Lukasz Wiktor,谢谢!我需要读 20 遍,但这正是我所希望的。
猜你喜欢
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多