【问题标题】:Dynamically generated LinkedIn share button in JavaScriptJavaScript 中动态生成的 LinkedIn 分享按钮
【发布时间】:2020-11-21 13:44:06
【问题描述】:

在我开始之前,我应该提到我最近发布了一个similar question,我试图在 Twitter 上做同样的事情。我最终使用了非常干净的 twttr.widgets.createShareButton 函数。这个问题可能有类似的解决方案,但我还没有通过阅读 Microsoft LinkedIn share-plugin 指南找到类似的解决方案。

我正在使用详细信息和摘要标签来显示职业列表,其中每个摘要中的数据元素存储附加到网站 URL 的代码。当用户单击摘要元素时,它会创建一个超链接,指向带有该角色的功能技能列表的页面。 然后我想生成一个按钮,以便网站用户可以分享到 LinkedIn。

这是我的codepen 以及我目前所拥有的。我已将生成LinkedIn 分享按钮的代码放在一个名为lnShare 的函数中。 下面的行似乎不起作用。

document.getElementById("p3").appendChild(ln)

我尝试从 lnShare 函数返回 ln,然后在调用该函数后直接调用 appendChild,但这也不起作用。我得到:

ReferenceError: ln 未定义

为了更好地说明我正在尝试做什么,codepen 展示了它与 Twitter twttr.widgets.createShareButton 函数一起使用。

这是我的代码:

function lnShare() {
console.log("lnShare started");
const ln = document.createElement('script');
ln.id="LN";
ln.type="IN/Share";
ln.setAttribute("data-url", fs.href);
//document.getElementById("p3").appendChild(ln);
console.log(ln);
return ln;  
 }

const root = "https://www.onetonline.org/link/summary/";



const fs = document.createElement('a');
fs.id="FS";
const linkText = document.createTextNode("functional skills");
fs.appendChild(linkText);
fs.classList.add("hide");
fs.title = "functional skills";
fs.href = "https://www.onetonline.org/link/summary/";

document.getElementById("p1").appendChild(fs);


document.getElementById("container").addEventListener("click",function(e) {
  const tgt = e.target;
  const isSummary = tgt.tagName==="SUMMARY";
  const code = tgt.dataset.code;
  console.log(root+code);
  fs.classList.toggle("hide",!isSummary || !code); // show only if summary AND code exists
  if (isSummary && code) {
    fs.href=root+code;
    console.log(fs.href);
    lnShare(fs.href);
    document.getElementById("p3").appendChild(ln);
  }  
})
.hide { display:none; }
<div id="container">
  <details id="agriculture" class="details">
    <summary>Agriculture</summary>
    <details>
      <summary data-code="53-7064.00">Picking & packing</summary>
    </details>
    <details>
      <summary data-code="45-2092.02">Farm worker</summary>
    </details>

    <details>
      <summary data-code="45-2091.00">Agricultural Equipment Operator</summary>
    </details>
    <details>
      <summary data-code="45-2093.00">Farmworkers, Farm, Ranch, and Aquacultural Animals</summary>
    </details>

  </details>

  <details id="construction" class="details">
    <summary>Construction</summary>
    <details>
      <summary data-code="47-2061.00">Construction Labourer</summary>
    </details>
    <details>
      <summary data-code="47-2073.00">Operating Engineers and Other Construction Equipment Operators</summary>
    </details>
    <details data-code="47-2051.00">
      <summary>Cement Masons and Concrete Finishers</summary>
    </details>
    <details>
      <summary data-code="47-2021.00">Brickmasons and Blockmasons</summary>
    </details>
    <details>
      <summary data-code="47-4031.00">Fence Erector</summary>
    </details>
    <details>
      <summary data-code="17-3031.01">Surveying Technician</summary>
    </details>
  </details>
</div>

<p id="p1"></p>

<p id="p2"></p>
<p id="p3"></p>
  

  <script src="https://platform.linkedin.com/in.js" type="text/javascript">lang: en_US</script>

非常感谢所有帮助。

【问题讨论】:

    标签: javascript linkedin linkedin-api


    【解决方案1】:

    您在 document.getElementById("p3").appendChild(ln); 中引用了 ln,但该变量尚未初始化。您需要将上一行更新为const ln = lnShare(fs.href);

    【讨论】:

    • 消除了错误消息,但我看不到应该出现在

      codepen 中的 LinkedIn 按钮在这里:codepen.io/j354374/pen/KKMjmVa跨度>
    • 好吧,您将脚本附加到p3,而不是按钮,因此没有按钮显示是有道理的
    • 确实如此。我可能必须先制作按钮(具有 id "LN" )然后附加到它,但首先我试图编写一次生成按钮的脚本。这是 LinkedIn 这样做的有趣方式。
    • 哦,超级简单,只需在附加ln 后添加IN.parse()。看来,为了加载动态生成的共享按钮,您需要告诉 LinkedIn 脚本重新加载共享链接。 h/t stackoverflow.com/questions/10178996/…
    • 将脚本放在 p 标签中是无效的 HTML,所以我也要看看。
    【解决方案2】:

    第一个问题是ln不在document.getElementById("p3").appendChild(ln)行的范围内,你可以尝试使用document.getElementById("p3").appendChild(lnShare())

    【讨论】:

    • 需要这样吗? document.getElementById("p3").appendChild(lnShare(fs.href))
    • 成功了吗?我认为您在上面的答案中找到了解决方案。玩得开心开发
    • 我最终没有使用该建议,但是在我的项目中,我不得不更改 lnShare 函数以使用 fs 而不是适用于 codepen 的 fs.href。 ln.setAttribute("data-url", fs); //从 fs.href 更改为 fs 以开始工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    相关资源
    最近更新 更多