从Facebook登录重定向后,在Adobe DPS Overlay中进行流星渲染



我遇到了一个非常具体的问题(实际上有两个问题,但我相信它们是相关的),我希望有人能对发生的事情有所了解。

我有一个Meteor应用程序在Adobe Digital Publishing Suite(DPS)文章的HTML覆盖层中运行。我已经用尽可能简单的配置进行了测试,并且能够始终如一地重现这个问题。

概述

1-Meteor在移动Safari和iPad上的移动Chrome(第三代,ios 6.1.7)中运行良好,但Adobe DPS文章内部的渲染生成了一个错误:

TypeError:"undefined"不是函数

虽然这个错误不会影响渲染,但我相信它与我的第二个问题有关:

2-从facebook身份验证(alt./non-JSSDK流)重定向后,页面根本不会呈现,但除了上面的#1之外,没有其他错误消息。

代码示例/详细信息

1."无头"浏览器

我在一篇文章中使用HTML覆盖,在InDesign内部设置,并使用Folio Producer发布到DPS。覆盖指向一个测试url(例如。http://dmx.dod.fbchat.meteor.com),并且在每次看到文章的特定页面时都会刷新。浏览器的详细信息如下:

appVersion:5.0(iPad;CPU OS 6_1_3,类似Mac OS X)AppleWebKit/536.26(KHTML,类似Gecko)Mobile/10B329

用户代理:Mozilla/5.0(iPad;CPU OS 6_1_3,类似Mac OS X)AppleWebKit/536.26(KHTML,类似Gecko)Mobile/10B329

我知道这个浏览器有一些限制(例如,alert = null;),它被认为是"无头"的,因为它不是chrome或safari的合法版本,没有地址栏等。

2.重定向通过以下方法实现

  • 创建一个全新的Meteor项目(例如meteor create DPSFBRender)
  • 决定你要从哪个流星uri中托管它(例如dmx.dod.fbchat.meteor.com)
  • 在facebook上创建应用程序(https://developers.facebook.com/apps),注意应用程序ID
  • 将你的流星uri添加到域和facebook上的重定向uri中。例如:

域:dmx.dod.fbchat.meteor.com

重定向uri:http://dmx.dod.fbchat.meteor.com/

  • 在默认流星项目js文件中的按钮点击事件中添加以下两行:

    var randID = Meteor.uuid();
    window.location.href = 'https://www.facebook.com/dialog/oauth?client_id=[FB APP ID]&redirect_uri=[URL WHERE YOU'LL HOST TEST]&state='+randID+'&response_type=token&scope=[LIST OF PERMISSIONS];
    

例如,如果我的测试URL是dmx.dod.fbchat.meteor.com,我的FB应用程序ID是514080555337856,并且我的权限列表很长(见下文),那么我的第二行看起来是这样的:

var randID = Meteor.uuid();
window.location.href = 'https://www.facebook.com/dialog/oauth?client_id=514080555337856&redirect_uri=http://dmx.dod.fbchat.meteor.com/&state='+randID+'&response_type=token&scope=create_note,email,friends_about_me,friends_actions.books,friends_actions.music,friends_actions.news,friends_actions.video,friends_activities,friends_birthday,friends_education_history,friends_events,friends_games_activity,friends_groups,friends_hometown,friends_interests,friends_likes,friends_location,friends_notes,friends_photo_video_tags,friends_photos,friends_questions,friends_relationship_details,friends_relationships,friends_religion_politics,friends_status,friends_subscriptions,friends_videos,friends_website,friends_work_history,photo_upload,publish_actions,publish_stream,read_friendlists,read_mailbox,share_item,status_update,user_about_me,user_friends,user_groups,user_interests,user_photos,user_relationship_details,user_status,video_upload,xmpp_login';
  • 将您的流星应用程序部署到测试uri(例如meteor deploy dms.dod.fbchat.meteor.com)

  • 将DPS文章中的html覆盖指向您的URL

  • 部署/发布你的文章,在iPad上的DPS查看器中打开它,然后单击按钮,激活重定向。

  • 系统将提示您允许FB应用程序权限,接受。

  • 你会被导航回你的流星网址,但页面不会出现。

  • 如果您更改文章页面,离开文章然后返回,或者只打开应用程序栏,然后返回文章,页面将刷新并呈现。

  • 只要您设置了权限(只要没有提示您接受),页面就会呈现良好。只有在自定义登录的FB提示和随后的重定向之后,页面才会呈现。

  • 如果你想再次测试,请在常规浏览器中登录你的fb帐户,然后删除该应用程序。

3.调试/发现

我开始使用debuggify对此进行调试,这时我能够看到TypeError: 'undefined' is not a function错误。乍一看,它并不能阻止任何东西的呈现,但我相信重定向是罪魁祸首(请参阅下面的思想部分)。

此错误将出现在DPS覆盖内渲染的任何流星页面上。它不必是重定向,也不必有任何内容。你只需创建一个新的流星项目,部署它,将DPS中的HTML覆盖指向它,就会出现错误(只有像debuggify这样的远程调试工具才会注意到)。

同样,此错误不会在IOS safari移动浏览器或chrome浏览器内部发生。从FB重定向后的上述渲染问题也将在两个浏览器中正常工作(页面将在"接受权限"屏幕后渲染)。

'undefined'...错误没有堆栈跟踪:

堆栈:类型错误:"undefined"不是处的函数?(http://dmx.dod.fbchat.meteor.com/:1:0)

。。尽管我们知道它发生在加载事件之后:

发生:加载后

思想

  1. 我认为这可能是Meteor中固有的动态JS加载与重定向的结合。简单地说,重定向没有等待足够长的时间来加载JS(尤其是手柄),因此没有进行渲染。

  2. 我不相信整个页面都被关闭了,因为在我的应用程序中(而不是测试),我正在获取URL哈希中的应用程序密钥,并成功存储它。所以,我知道Javascript在页面上并没有完全关闭。只是由于某些原因,渲染部分不起作用。

  3. 我认为'undefined' is not a function错误是相关的——可能是Jquery、Handlebars、DDP。。。。某些内容未按预期加载。在正常页面加载(例如刷新)时,浏览器正在克服这一问题。在FB的重定向上,它不是。

  4. 这可能与嵌入式DPS浏览器的JS/浏览器限制有关。Adobe限制了一些功能(出于安全和性能原因),也许他们正在关闭流星需要运行的东西。

  5. 我尝试过的解决方法:

    • 使用默认Meteor FB登录--无法识别"无头浏览器",而且DPS中不允许弹出窗口
    • 使用FB的标准JSSDK登录流——同样的交易,不允许弹出窗口

想法

所以,在这一点上,我对任何事情都持开放态度,即使它不能解决这个特定的问题。

解决方法,你经历过的类似问题,想法,对为什么重定向时会发生这种情况的猜测,但通常不会发生,等等。

我知道可能有几种方法可以剥这只猫的皮,但我现在陷入了困境,我很想听听一些建议。我只需要让FB登录到DPS内部即可工作。我不在乎如何,即使所有的代码都是客户端的(这只是一个测试,而不是一个生产系统)

我甚至考虑过在流星中编辑账户facebook和账户基础包,以识别无头浏览器,但我甚至不知道从哪里开始。。。

此外,无论怎样,在DPS文章中的每一个流星页面上都会发生'undefined'...错误。这很烦人,如果有人知道为什么会发生这种情况,这可能对一些移动无头浏览器兼容性的改进有用。

后续行动也很受欢迎。我将监视这个线程。

原来Tom Coleman帮我找到了这个特定的问题。

当JS被缩小时,如果缺少分号,它可能会造成严重破坏,并导致上述"未定义"错误。

因此,经过进一步的测试,我发现这很可能是在每个覆盖都加载的Adobe特定DPS Javascript中。

我已经向Adobe提交了一个错误,看看它是否/何时修复,是否也修复了渲染问题。

最新更新