ArtitalkJS / Artitalk

通过leancloud实现的可实时发布说说的js
https://artitalk.js.org
MIT License
321 stars 52 forks source link

valine && artitalk #13

Closed inkss closed 4 years ago

inkss commented 4 years ago

描述你想实现或修改的功能 valine 和 artitalk,能不能在初始化 artitalk 的时候检测 valine 或者 leancloud 的变量是否已经定义了,然后将其清除了,避免冲突呢?

Drew233 commented 4 years ago

leancloud不允许同一个页面初始化两个不同的应用,不过原则上讲,只要你在存储说说的应用中新建valine所需的class应该是可以使用的。

inkss commented 4 years ago

能清除valine创建的应用吗?

Drew233 commented 4 years ago

不用,其实可以这样理解,在说说页面使用的valine与整站使用的valine不在一个应用中

inkss commented 4 years ago

懂你意思了,以应用为准啊

Drew233 commented 4 years ago

不过这只是理论可行,没试过

inkss commented 4 years ago
Uncaught (in promise) TypeError: Cannot redefine property: applicationId
Drew233 commented 4 years ago

不能用吗?😂

inkss commented 4 years ago

如果是走重置变量的思路呢,在定义的时候都会创建那些变量啊?

Drew233 commented 4 years ago

初始化吗?就这两个会产生冲突(如果使用国内版的话还有serverurl)

var appID="";
var appKEY="";
Drew233 commented 4 years ago
var severurl=""
inkss commented 4 years ago

在说说页面使用的valine与整站使用的valine不在一个应用中

不同应用是可以使用你这个思路的

Drew233 commented 4 years ago

inkss commented 4 years ago

如果是同一个应用,能共用变量吗?比如valine初始化出来的 AV 对象

Drew233 commented 4 years ago

可以,但是对于valine的评论添加用户可能会与artitalk有冲突吧,这个我不是很清楚,因为artiitalk会对User进行权限上面的设置,valine我不知道

inkss commented 4 years ago

thx 啦,我是想到 pjax 兼容上,在跳转到说说页面时,先把 window.AV.applicationId 和 window.AV.applicationKey 置空,然后你这边正常初始化,离开页面后再次置空了

Drew233 commented 4 years ago

pjax太顶了,其实可以给说说加个target="_blank"跳转新页面,就不会有问题了😄

inkss commented 4 years ago

那还要处理从这个页面离开的情况呀,而且刷新总觉得不好

Drew233 commented 4 years ago

在之前解决mathjax的问题的时候我看到有人说可以重写pjax的刷新规则,但是我不会,如果你会的话可以尝试一下

inkss commented 4 years ago

你从这个页面,然后跳留言板 https://colsrch.top/Creator-said/ 这个时候应该用的是说说的应用,原来的留言没有

inkss commented 4 years ago

@Colsrch 你是用多应用吗? 说说和评论是分开的吗?

inkss commented 4 years ago

valine 似乎有点判断处理啊,没有重复初始化

Drew233 commented 4 years ago

嗯?我不知道,没有仔细地试过

Colsrch commented 4 years ago

你从这个页面,然后跳留言板 https://colsrch.top/Creator-said/,这个时候应该用的是说说的应用,原来的留言没有

你发现了新的问题,我一直都没发现

Colsrch commented 4 years ago

@Colsrch 你是用多应用吗? 说说和评论是分开的吗?

对,我是两个应用

inkss commented 4 years ago

不急不急,多好的范例

MHuiG commented 4 years ago

valine 似乎有点判断处理啊,没有重复初始化

valine只在加载AV完成后进行初始化,加载完成AV后不再加载,因此不再初始化,所以就继续使用了你的AV。

inkss commented 4 years ago

@MHuiG 所以,仅以 valine 和 Artitalk 来说,那就在进出 Artitalk 页面之前、之后执行 delete AV; 就不会出来报错的问题了吧,这样子可以顺畅的 pjax 切换页面来着。

@Colsrch 你可以试试,把 window.location.href = targetUrl;改成 delete AV; ,然后配置文件里加上你说说的地址。 image