我已经构建了一个简单的Android应用程序,作为出版网站的配套文件,使用Ionic框架,并且(经过多次头脑冲击),我设法让应用程序上的Disqus线程同步那些在网站上。在尝试了几种不同的方法之后,我最终使用this directive from Michael Bromley在应用程序中实现了Disqus小部件,它隐藏在"评论"应用程序用户界面上每篇文章底部的按钮。
使用Ionic Serve运行,一切都运作良好。在本地服务器之外:不是那么多。我没有收到来自Disqus的错误消息 - 它根本不会加载iframe。我没有发布代码,因为我想知道这只是一个CORS问题,还是我可以忽略的简单问题。
有一件事可能很重要:我没有在应用程序上安装Crosswalk插件 - 我不确定我的想法是否正确,这里,但是有可能与Disqus兼容使用Chrome,这就是为什么我在浏览器上测试时运行正常,但与Android的默认浏览器不兼容?我在Crosswalk上读得不是很好,但我相信它会告诉应用程序使用特定的浏览器 - 如果是这样,可以安装它来修复问题吗?我会继续安装它,看看它是否有帮助,但如果问题与插件完全无关,我想避免使用其他工作应用程序篡改太多。
一个奇怪的警告:当我在Genymotion上测试应用程序时,在一个文章上加载了Disqus评论就好了。我删除了那篇文章,并在我的网站上创建了一篇新的测试文章(因此启动了一个新的Disqus线程),并且无法在Genymotion上呈现。看起来非常......随机,我想,它会工作一次。似乎它会一直工作,或者从不工作。
编辑:在Genymotion上运行时,在使用WebView调试应用程序时,控制台中不会出现任何错误。事实上,我没有得到拒绝加载"错误让我觉得Disqus正在被调用,无论出于何种原因,它都拒绝接听电话。
答案 0 :(得分:0)
我可以花几个小时试图解决问题,然后......好吧,我发布一个问题后,我最终会在五分钟后找出答案。
我深入研究了我正在使用的指令的代码(我强烈建议任何希望在任何AngularJS项目中轻松实现Disqus的人),并且我注意到要使用以下字符串调用embed.js
:
....
if (!$window.DISQUS) {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + scope.config.disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
} else {
....
修改dsq.src = '//' + scope.config.disqus_shortname + '.disqus.com/embed.js';
添加协议,使其dsq.src = 'http://' + scope.config.disqus_shortname + '.disqus.com/embed.js';
解决了Genymotion上的问题。我会将更新后的APK发送到Play商店,并对此答案发表评论,以确认其是否也存在。