在Windows Phone上拦截html5应用程序中的所有get请求

时间:2014-08-28 18:11:21

标签: c# javascript html5 cordova windows-phone-8

Corodva,Javascript和HTML5开发人员。

我需要在任何时候拦截Windows Phone 8.0中的WebBrowser组件发出的所有get请求,并能够查看它请求的资源。举一个“全部”的例子,这就是我的意思。

我有一个简单的应用程序,其中包含一个cordova(带有装饰器的WebBrowser控件,允许从本地存储中检索XHRrequest)视图,并导航到index.html文件。

index.html仅包含正文中的以下内容

<img src="logo.png" />

此文件由Web浏览器加载和显示,但是我无法通过Web浏览器向Windows Phone发出可拦截的请求。该文件只是神奇地出现在浏览器中。我知道cordova会覆盖所有XHR请求以换出本地文件。 XHRHelper.cs中的任何方法都没有被logo.png请求命中。这是我尝试过的所有内容,所以我们都可以在同一页面上。

  • 订阅导航,导航和导航失败(仅因为没有其他选项)事件,以查看它是否在任何时刻点亮以加载logo.png。事实证明,它只针对在应用程序中进行的实际导航调用而触发。我也订阅了所有,我的意思是WebBrowser控件中可用的所有事件。甚至是从UIElement继承的。
  • 尝试将WebBrowser包装在COM包装器中,该包装器使用http://www.codeproject.com/Articles/157329/Http-Monitor-for-Webbrowser-Control“监视”所有传出流量,这对Windows Phone 8.0 Web浏览器控制不起作用。仍然是一个很好的锻炼。它也不会收到对本地文件的请求。
  • 我检查的下一个选项是拦截来自JavaScript的所有请求的方法,但发现很多帖子只解释了如何拦截所有AJAX请求,这不是我想要做的。
  • 然后,我实现了拦截所有AJAX请求的方法,看看它是否会对我可能做的事情有所了解。这项运动没有任何结果。然后我也做了[How do you 'intercept' all HTTP requests in an EmberJs app?。蚂蚁也没有帮助,然后我看了intercept.js并尝试使用它,但是logo.png再次抓住了intercept.js的把握以及
  • 我是一名Windows Phone .NET开发人员,除了将HTML5应用程序包装到cordova中6个月之外,我从未体验过JavaScript,我回到了Windows手机代码,试图在离开WebBrowser控件时捕获导航。我试图覆盖特定于WebBrowser的所有方法并试图取消任何和所有请求,只是为了看看logo.png是否仍会出现在浏览器中并且确实如此:(

如果我没有对这个问题进行任何研究,我不会问这个问题。一些JavaScript开发人员表示他们不认为这可能来自应用程序内部,许多C ++开发人员说我应该查看WebBrowser控件的本机代码实现,找出它扩展的接口并抓住它不知何故延伸。我将在明天整天尝试这样做,但是如果(希望)有一种简单的方法可以做到这一点,我想不要过分夸大这种情况。

我的下一步是使用fiddler或charles之类的工具来监控通过代理的所有数据包。如果我可以通过任何这些工具看到对本地文件的请求,那么必须有一种方法可以在代码中拦截这些请求。如果成功,我将尝试在运行时设置本地代理并通过我的文件处理程序重定向。

我与一些iOS开发人员交谈,他们使用了NSURLProtocol,您只需要设置,然后就可以监控所有流量(Lucky)。 Windows Phone 8.0有这样的东西吗?有没有人有关于如何为Windows Phone 8.0实现此功能的建议?有什么方法可以拦截来自html5应用程序的所有请求。任何方式都没问题,我相信我能够实施任何建议,并提供反馈,如果它不起作用。最大的问题是,如果它甚至可能。

任何反馈都将受到赞赏,任何建议都将得到贯彻。我将就该建议提供反馈。

先谢谢你,我知道这里有一些严肃的Code Ninjas会给我一百万个选项:)

1 个答案:

答案 0 :(得分:0)

我找到了一个解决这个问题的非常简单的方法。由于Mobile IE10不提供拦截网页请求的功能,因此我离开了该路径并选择不拦截请求而是重定向它。

我是通过在手机上设置套接字服务器并从localhost请求HTML5应用程序中的资源来实现的。这是一个例子:

我在index.html中使用的文件,如下所示

    <img src="logo.png" />

我改为

    <img src="http://localhost:99/logo.png" />

这样,您就可以在套接字服务器中触发Process请求事件,您可以在其中适当地处理资产请求。您可以使用logo.png并使用套接字服务器中的简单映射返回具有不同名称的图像,这是我需要做的。

我希望这可以帮助处理相同问题的人:)