JavaScript 中动态生成的 LinkedIn 分享按钮

Dynamically generated LinkedIn share button in JavaScript

在开始之前我应该​​提到我最近发布了一个 where I was trying to do the same with Twitter. I ended up using the twttr.widgets.createShareButton function which worked very cleanly. There may be a similar solution to this issue but I haven't yet been able to find something like that from reading the Microsoft LinkedIn share-plugin 指南。

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

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

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

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

ReferenceError: ln is not defined

为了更好地说明我正在尝试执行此操作 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>

非常感谢所有帮助。

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

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