如何创建包含动态 html (javascript) 的可共享 url

How to create a sharable url containing dynamic html (javascript)

为用户创建的某些文本列表创建独特的可共享 url 的最佳做法是什么?

这是一个包含内容 div 的单页网站,用户可以在其中创建文本列表。一旦他们点击共享,我如何将这些值存储在可共享的 url 中,以便另一个访问该地址的用户加载相同的列表?

我正在使用 html、js、jquery、php。

编辑: 如下所示,我已经将列表保存在数据库 (firebase) 中,并且每个列表都有一个唯一的 ID,所以我需要了解我是如何可以创建带有列表 ID 的 url,以及如何读取 url 返回。

编辑 2: 所以这是我现在使用的代码,结合了 marzelinAlchemist Shahed 关于我的数据库结构的其他问题 ():

//js inside window load function:
  const keyOfDynamicHtmlItemRef = new URL(window.location).searchParams.get("share")
  if (keyOfDynamicHtmlItemRef) {
    var dynamicHtmlListRef = firebase.database().ref('users');
    // var dynamicHtmlItemRef = dynamicHtmlListRef.child(keyOfDynamicHtmlItemRef);
    // console.log(keyOfDynamicHtmlItemRef);
    // dynamicHtmlItemRef.once("value").then(dynamicHtmlSnap => {
    //   texta.innerHTML = dynamicHtmlSnap.val();
    // });
    dynamicHtmlListRef.once('value').then((snapshot)=>{
     snapshot.forEach(function(data) {
        if (data.key == keyOfDynamicHtmlItemRef) {
          myVar = data.c;
          myContentDiv.innerHTML = myVar;
        }
     });
    });
  }

我只是尝试在搜索栏中手动写入 url 作为第一步,如 https://example.com/?share=<random list id i copied from db>,但它什么也没做。

所以我的方法是让用户共享点击触发保存到数据库,将所有动态生成的内容保存到 table。

其中一个 table 值是随机生成的某种唯一标识符,我将在 url 中用作查询,例如 https://www.example.org/?share=skd822475

然后当用户访问该站点并且该查询在 url id 中时,使用唯一标识符查找数据库并将动态内容发布回页面。

我还会将数据库条目的半衰期设置为不超过 30 天,这样它就不会阻塞数据库。

让我们从第一个问题“如何创建带有列表 ID 的 url 开始?

问题是要回答这个问题我们需要先回答第二个问题 是 "如何读回 url?"

假设您有一个名为 "draft" 的 php 页面。当用户访问 https://www.example.com/draft?listId=an_id 时,您将像这样 $_GET("listId") 使用 php 获得 listId 并使用该值检索列表数据并显示页面内容。

现在回到第一个问题,如果用户像在社交媒体(例如:facebook)中一样分享草稿,那么就没有问题,因为他会分享 link 和他的所有追随者以及任何其他人用户可以轻松访问它。但是,如果用户只是保存草稿,那么您将不得不像这样 window.history.pushState(null, null, '/draft?listId=your_newly_created_id'); 动态地更改页面 url,因此用户将复制 url 并用它做任何他想做的事情(共享它在 Whosebug 中可能是使用 jsfiddle http://jsfiddle.net/F2es9/ 的示例(您可以使用 'htaccess' 文件将 url 更改为看起来像这样))最后我想告诉你我们不 "create" urls.

编辑

不使用 php 代码(或任何其他服务器端代码)。不同之处在于检索数据。 您将使用 new URL(window.location).searchParams.get("listId") 而不是使用 $_GET("listId") 来获取 javascript 中的列表 ID 然后使用此值您可以从 firebase 检索数据并显示您的内容

保存数据并创建可共享的 link:

document.querySelector(".share").addEventListener("click" => {
  var dynamicHtmlListRef = firebase.database().ref('dynamic_html');
  var dynamicHtmlItemRef = dynamicHtmlListRef.push();
  dynamicHtmlItemRef.set(userCreatedDynamicHtml);
  var keyOfDynamicHtmlItem = dynamicHtmlItemRef.key;
  var linkToDynamicHtmlItem = `${window.location}?share=${keyofDynamicHtmlItem}`;
  alert(`link: ${linkToDynamicHtmlItem}`)
})

显示基于查询参数的动态HTML:

const keyOfDynamicHtmlItemRef = new URL(window.location).searchParams.get("share")
if (keyOfDynamicHtmlItemRef) {
  var dynamicHtmlListRef = firebase.database().ref('dynamic_html');
  var dynamicHtmlItemRef = dynamicHtmlListRef.child(keyOfDynamicHtmlItemRef);
  keyOfDynamicHtmlItemRef.once("value").then(dynamicHtmlSnap => {
    document.querySelector(".dynamic-html-mountpoint").innerHTML = dynamicHtmlSnap.val();
  });
}