小编Gra*_*mpa的帖子

Cordova外部应用+本地视频

我们有一个使用PhoneGap/Cordova 4.3.0构建的iOS应用程序.此应用程序通过<content src="http://example.com/foo" />config.xml文件中使用直接加载外部网站.所有功能都包含在本网站中,因此我们实际上并没有使用任何本地HTML或JS文件.

作为应用功能的一部分,我们必须播放一些视频.由于该应用程序也设计为脱机工作,因此我们希望在本地缓存这些视频.因此,我们使用FileTransfer插件将其下载到设备,以及其他资源,如图像或PDF.下载文件后,我们将获得带有file://协议的URL .我们也可以选择使用该cdvfile://协议.当我们使用cdvfile://URL显示图像时,图像会正确显示.但是,视频根本不播放.

要播放视频,我们使用标准HTML5视频标记:

<video width="auto" height="100%" controls="controls" autoplay="true">
    <source src="..." type="video/mp4" />
</video>
Run Code Online (Sandbox Code Playgroud)

视频本身正在工作,它们将从外部源正确播放(如果我们从服务器而不是本地文件系统访问它们,它们将播放).我意识到问题与Web相关的概念有关,例如同源策略和访问本地文件系统的限制.然而,与此同时,我必须想知道为什么图像在这些相同的约束下工作正常.

到目前为止我尝试了什么:

  1. 使用file://cdvfile://URL作为src视频.这不会产生任何视觉效果.屏幕简直是黑色.
  2. 使用iframe带有src设置的视频URL.使用时file://,屏幕仍为黑色.但是,在使用时cdvfile://,会出现iOS视频播放器界面,带有播放按钮和全屏按钮,但视频无法播放,也没有时间线.
  3. 将一个本地文件添加到cordova中video.html,该文件将URL作为参数并video使用该URL 呈现标记src.计划是将此文件包含在内iframe,但显然我无法创建iframe本地文件.我尝试过各种可能指向该特定video.html文件的URL (虽然实际上我不确定这是否可行).在我试过的人分别为:cordova.file.applicationDirectory + 'www/video.html',http://localhost/www/video.html,cdvfile://localhost/www/video.html.
  4. 我找了一些可以播放视频的cordova插件,但是我找不到适合iOS的插件.大多数插件似乎都针对Android.

现在,我可能会以错误的方式解决这个问题.正如我所看到的,cordova的"标准用例"是您在本地存储HTML/JS/CSS文件.像我正在使用的外部内容可能有点不寻常.我将解释这个使我使用此功能的应用程序的要求.

  • 该应用程序应该是为多个平台构建的(虽然我们从iOS开始).因此我们正在使用PhoneGap.
  • 虽然所有内容都来自服务器(没有内容在本地生成),但它应该可以在线和离线访问.这就是我们下载内容并在本地保存的原因.
  • 它还应该动态自动更新自身的任何部分,而无需从App Store进行更新.这就是我们使用外部页面的原因 - 因为它cache.manifest允许我们控制Web应用程序代码的更新,同时允许它在本地缓存.这可能是最重要的考虑因素,因为如果我们想在Cordova中本地保留一些文件,我们将不得不在Javascript中重新实现这个缓存功能(尽可能使用尽可能薄的层).

无论如何,我主要关注的是如何让这些视频正常运行.我愿意尝试最骇客的解决方法!如果当前的开发决策真的不可能,那么也许你可以给我一些关于如何构建应用程序以使其工作并仍然满足我的要求的提示.

非常感谢你!

javascript html5-video ios cordova phonegap-build

13
推荐指数
1
解决办法
3195
查看次数

Magento adminhtml AJAX查询返回302状态

我目前正在开发一个Magento扩展,其主要组件是前端窗口小部件和后端管理选项面板.我没有前端控制器,但我有一个adminhtml控制器,给我一些麻烦.这是我的控制器中的一些代码.

文件:/app/code/community/Mynamespace/Myextension/controllers/Adminhtml/MybackendController.php

class Mynamespace_Myextension_Adminhtml_MybackendController
    extends Mage_adminhtml_Controller_Action
{
    protected function normalAction() {
    }

    protected function ajaxAction() {
        die('got here');
    }
}
Run Code Online (Sandbox Code Playgroud)

normalAction是通过浏览链接调用的动作http://mystore.com/index.php/admin/mybackend/normal/key/.../.有几个动作像这样如index,save,edit,grid,等入口点到我的控制器是一个菜单项,导致了index行动.所有这些行动都按预期工作.

ajaxAction 是仅通过AJAX POST查询调用的操作.

问题是每当我尝试这样做时,我都会得到一个302 HTTP状态码回复,重定向到管理仪表板(admin/index/index).如果我尝试通过在浏览器中键入其链接来直接访问此操作,我仍然会得到302.如果我向此操作添加一个菜单项,那么它按预期工作,我看到"到达此处"文本.

执行AJAX请求的Javascript/jQuery代码并不复杂:

$.post(
    'http://mystore.com/index.php/admin/mybackend/ajax/key/.../',
    somePostDataObject,
    function() {
        alert( 'success' );
    }
);
Run Code Online (Sandbox Code Playgroud)

请注意,即使状态代码为302,也会调用success函数.

我尝试调试路由机制,以准确了解导致它重定向的原因.到目前为止,我已经推断出类的preDispatch方法中出现了问题Mage_Core_Controller_Varien_Action.成功解析模块,控制器和操作,并将请求标记为已调度(_dispatched属性为true),直到controller_action_predispatch调度该事件为止.事件解决后,请求显示为未分派(_dispatched变为false).据推测,监听此事件的对象之一会对请求进行一些进一步处理并拒绝它.我无法进行更深入的调试.

通常我会发布一些代码来帮助你理解发生了什么甚至更好,但是从各种配置文件和类中复制了很多行,所以我会这样做,因为人们写评论或答案要求查看特定文件.到目前为止,我认为配置是正确的,因为除了AJAX请求之外的所有其他功能都可以正常工作.

magento magento-1.7

7
推荐指数
1
解决办法
7315
查看次数

按顺序运行多个Magento DataFlow配置文件

我正在开发一个Magento扩展,允许用户将来自不同网店解决方案的类别,产品和其他类型的数据导入Magento.为了实现这一目标,我设置了几个负责导入的DataFlow高级配置文件.

到目前为止,它工作正常,但配置文件需要以适当的顺序运行(第一类,然后是产品等).为了使非技术用户尽可能轻松,并尽量减少人为错误的可能性,我想按顺序自动运行配置文件.理想情况下,您只需按一个"运行配置文件"按钮,然后观察草生长几个小时,而DataFlow处理配置文件.

我似乎无法做到这一点.我的主要问题是 - 这可能吗?如果是,那怎么样?

我试图在同一个XML文件中组合多个配置文件(实际上只是在一个XML中复制粘贴2个配置文件),但这不起作用.解析了输入文件,但不管怎么说,还没有运行负责实际导入的Adapter类.

有没有办法告诉配置文件在完成时开始另一个配置文件(例如通过"完成"方法)?或许我应该写一个小的控制面板,你可以点击"运行"按钮,然后控制面板通过一些AJAX伏都教来处理序列?

不幸的是,使用命令行脚本不是一种选择,也没有使用Magmi.

为了完整起见,我必须提到所有配置文件包括:

  • 读取CSV文件的IO适配器
  • 自定义CSV解析器(从默认的DataFlow CSV解析器复制,并进行一些调整以解释输入文件中的怪癖)
  • 执行导入的自定义适配器

magento

5
推荐指数
1
解决办法
2145
查看次数

向 Laravel Passport 添加 SSO 流程

我们正在尝试使用 Laravel Passport 实现 SSO 解决方案。关于这个主题已经有一个问题,但我认为这个问题更多的是关于本质问题。

我们的要求是:

  • 在 Passport.com 上运行的 Laravel Passport 服务
  • 不同域上的一些第一方网站:foo.com、bar.com
  • 用户可以通过直接输入访问详细信息(密码授予)来登录 foo.com 和 bar.com
  • 如果用户登录 foo.com,然后访问 bar.com,他们应该自动登录

根据我对 Oauth2 的理解,系统应该如下工作:

初始登录流程:

  1. 用户在 foo.com 上输入详细信息
  2. foo.com 使用密码授予向 Passport.com/oauth/token 发出请求,并检索访问令牌和刷新令牌。此外,还会生成并返回 SSO 令牌。
  3. foo.com 将用户重定向到 Passport.com/sso/passthrough ,并传递 SSO 令牌和返回 URL 作为查询参数。
  4. Passport.com 将令牌保存为 cookie,然后重定向到返回 URL。
  5. 用户返回 foo.com 并且可以使用该网站

请注意,必须重定向到 Passport.com,否则 Safari 和 Chrome 等浏览器在隐身模式下会将 Passport.com 视为第三方域,并且 Cookie 将被阻止。

单点登录流程:

  1. 用户访问 bar.com
  2. bar.com 使用 SSO 授权和重定向 URI bar.com/sso/return 向 Passport.com/oauth/authorize 发出 AJAX 请求
  3. 在 Passport.com 上,SSO Grant 在 cookie 中查找 …

single-sign-on oauth-2.0 laravel laravel-passport

5
推荐指数
0
解决办法
922
查看次数