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