Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用本地存储传递Chrome Web应用程序中的链接ID_Javascript_Html - Fatal编程技术网

Javascript 使用本地存储传递Chrome Web应用程序中的链接ID

Javascript 使用本地存储传递Chrome Web应用程序中的链接ID,javascript,html,Javascript,Html,我正在为一家当地的玻璃公司开发一个Chrome网络商店应用程序,目的是从各种社交帐户和网站中获取他们服务的潜在客户,我正在为它开发JavaScript,它目前从点击链接(无论是Facebook、Twitter、网站等)收集ID现在已经成功地将它们添加到本地存储中。我希望能够记录ID(Facebook、Twitter等),函数saveBookmarks()就是这样做的,如果他们继续进行查询,就能够确定查询来自何处。这是因为我只从应用程序中任何链接的成功销售中获得佣金!。因此,我需要一种方法,如果他

我正在为一家当地的玻璃公司开发一个Chrome网络商店应用程序,目的是从各种社交帐户和网站中获取他们服务的潜在客户,我正在为它开发JavaScript,它目前从点击链接(无论是Facebook、Twitter、网站等)收集ID现在已经成功地将它们添加到本地存储中。我希望能够记录ID(Facebook、Twitter等),函数saveBookmarks()就是这样做的,如果他们继续进行查询,就能够确定查询来自何处。这是因为我只从应用程序中任何链接的成功销售中获得佣金!。因此,我需要一种方法,如果他们通过各种帐户进行查询,就能够传递身份信息,并保持持久性。所有链接都有单独的ID,带有“ChromeApp”键。因此,它目前正在工作,但在同一链接上的额外点击被记录并添加,因此我需要一种方法来确定id值是否已经添加。同样如上所述,如果用户通过他们的任何帐户进行查询,例如,他们的网站使用电子邮件表单,其他都是社交媒体帐户,那么我想知道如何传递id,这样他们就知道它来自Chrome应用程序。(将删除YouTube并替换为其他内容)我还运行了两个测试函数,一个是控制台在添加条目时记录所有条目,另一个是删除存在的id(fetchBookmarks(),deleteBookmark()),但如果id已经存在,还需要找到一种不添加id的方法。deleteBookmark()函数与saveBookmarks()函数不同,它只是不断添加id项。到目前为止,我所掌握的情况如下

HTML代码

<div class="modal-icons">
    <div class="flex-container">
        <div class="flex" id="Website" onclick="saveBookmark(this.id)">
            <a href="http://allweatherroofline.com" target="_blank">
            </a>
            <i class="fa fa-globe"></i>
        </div>
        <div class="flex" id="YouTube" onclick="saveBookmark(this.id)">
            <a href="#" target="_blank">
            </a>
            <i class="fa fa-youtube"></i>
        </div>
        <div class="flex" id="Facebook" onclick="saveBookmark(this.id)">
            <a href="#" target="_blank">
            </a>
            <i class="fa fa-facebook"></i>
        </div>
        <div class="flex" id="Twitter" onclick="saveBookmark(this.id)">
            <a href="#" target="_blank">
            </a>
            <i class="fa fa-twitter"></i>
        </div>
        <div class="flex" id="Linkedin" onclick="saveBookmark(this.id)">
            <a href="#" target="_blank">
            </a>
            <i class="fa fa-linkedin"></i>
        </div>
    </div>
</div>

Javascript

    function saveBookmark(id) {
     if(localStorage.getItem('ChromeApp') === null){
    // Init array
    var linkVisit = []
    // Add to array
    linkVisit.push(id);
    // Set to localStorage
    localStorage.setItem('ChromeApp', JSON.stringify(linkVisit));
  } else {
    // Get bookmarks from localStorage
    var linkVisit = JSON.parse(localStorage.getItem('ChromeApp'));
    // Add bookmark to array
    linkVisit.push(id);
    // Re-set back to localStorage
    localStorage.setItem('ChromeApp', JSON.stringify(linkVisit));
  }
fetchBookmarks();
deleteBookmark();
}
// Fetch bookmarks to test additions
function fetchBookmarks(){
  // Get bookmarks from localStorage
var linkVisit = JSON.parse(localStorage.getItem('ChromeApp'));
console.log(linkVisit);
} 
   //Try to delete ids which are already been clicked. Doesnt work!
    function deleteBookmark(id){
  // Get bookmarks from localStorage
  var linkVisit = JSON.parse(localStorage.getItem('ChromeApp'));
  // Loop through the bookmarks
  for(var i =0;i < linkVisit.length;i++){
    if(linkVisit[i].id == id){
      // Remove from array
      linkVisit.splice(i, 1);
    }
}
}
函数保存书签(id){
if(localStorage.getItem('ChromeApp')==null){
//初始化数组
var linkVisit=[]
//添加到数组
linkVisit.push(id);
//设置为本地存储
setItem('ChromeApp',JSON.stringify(linkVisit));
}否则{
//从localStorage获取书签
var linkVisit=JSON.parse(localStorage.getItem('ChromeApp');
//向数组添加书签
linkVisit.push(id);
//重新设置回本地存储
setItem('ChromeApp',JSON.stringify(linkVisit));
}
获取书签();
删除书签();
}
//获取书签以测试添加内容
函数fetchBookmarks(){
//从localStorage获取书签
var linkVisit=JSON.parse(localStorage.getItem('ChromeApp');
console.log(linkVisit);
} 
//尝试删除已单击的ID。不行!
函数deleteBookmark(id){
//从localStorage获取书签
var linkVisit=JSON.parse(localStorage.getItem('ChromeApp');
//循环浏览书签
对于(var i=0;i
“Twitter”、“Facebook”或其他设置的
id
是所需的全部,但他们可能会在同一次访问中向不同的SM帐户进行多次查询,并且需要所有访问的记录


欢迎提供任何提示,谢谢。

您只需在阵列上使用
.contains()

function saveBookmark(id) {
     if(localStorage.getItem('ChromeApp') === null){
    // Init array
    var linkVisit = []
    // Add to array
    linkVisit.push(id);
    // Set to localStorage
    localStorage.setItem('ChromeApp', JSON.stringify(linkVisit));
  } else {
    // Get bookmarks from localStorage
    var linkVisit = JSON.parse(localStorage.getItem('ChromeApp'));
    // Add bookmark to array
    //If id is already in there, don't do anything.
    if(!linkVisit.contains(id)){
      linkVisit.push(id);
      // Re-set back to localStorage
      localStorage.setItem('ChromeApp', JSON.stringify(linkVisit));
    }
  }
不过,我建议您重新编写整个代码,改用对象。另外,让你的代码更高效,就像这样

//Get the local storage item, if null, set empty object
var linkVisit = localStorage.getItem('ChromeApp') === null ? {} : JSON.parse(localStorage.getItem('ChromeApp'));

  //Function to avoid repeated code, saves management time.
  function updateLocalStorage(){
    localStorage.setItem('ChromeApp', JSON.stringify(linkVisit));
  }

  function saveBookmark(id) {
    //Check if ID was already in the localstorage
    //If not, add it.
    if(!linkVisit.hasOwnProperty(id)){
      linkVisit[id] = id;
    }
    //Update the local storage
    updateLocalStorage();
  }

  //This function is kind of redundant now.
  function fetchBookmark(){
    console.log(linkVisit);
  }

  function deleteBookmark(id){
    //Delete the object property
    delete linkVisit[id];
    //Update local storage again
    updateLocalStorage();
  }

很好,第二种方式看起来好多了,只使用前两个功能,似乎可以工作(没有重复的项目),但改变了id ie的键,而不是“ChromeApp”,键是“Facebook”,值是Facebook。可以吗?不使用deleteBookmark(),因为不需要删除它们。当用户点击一个项目时,只需记录一个id。谢谢。我不知道你的意思。ChromeApp是本地存储项的名称。。甚至在你的代码中。我不完全确定你想做什么不同的事情?没错,但我只是使用了前两个功能(第二种方式),我得到了一个键“Facebook”和一个值Facebook,之前我得到了一个键“ChromeApp”,所以可能出了问题。不需要做任何不同的事情,代码太多。只需注册单击的id即可。仅逐字使用前2个函数。完成了这项工作,但现在需要了解如何在用户访问Facebook等网站时传递id。谢谢帮助,我只是将
id
的值放在那里,因为我不确定你想要什么。你可以用它做任何事,知道吗?如果键是
facebook
,你可以给它任何值。甚至还有另一个
数组
对象
。你可以在里面放任何你想放的东西:)只是想保留一个id的记录,没有什么特别的(这超出了我的范围!)所以我们知道后续查询的来源,比如他们Chrome商店应用程序上的Facebook链接),因为这是我获得报酬的唯一途径!,来自应用程序的任何销售。困难在于将它们传递给/通过公司的社交帐户,因为它们都有不同的API,我以前从未使用过。然后在他们的实际网站上还有他们的电子邮件表单!不过谢谢你的帮助,它解决了这个问题。