在windows phone上拦截html5应用程序中的所有get请求
本文关键字:请求 get 应用程序 html5 phone windows | 更新日期: 2023-09-27 18:19:45
Corodva、Javascript和HTML5开发人员。
我需要在任何时候调解Windows Phone 8.0中WebBrowser组件发出的所有get请求,并能够查看它请求的资源。举一个"全部"的例子,这就是我的意思。
我有一个简单的应用程序,它包含一个cordova(带有Decorators的WebBrowser控件,允许从本地存储检索XHR请求)视图,并导航到一个index.html文件。
index.html在正文中仅包含以下内容
<img src="logo.png" />
该文件由web浏览器加载并显示,但我可以看到通过web浏览器向Windows Phone发出的不可拦截的请求。该文件只是神奇地出现在浏览器中。我知道cordova会覆盖所有XHR请求以交换本地文件。XHRHelper.cs中没有任何方法被logo.png请求击中。以下是我尝试过的所有方法,这样我们就可以在同一页上了。
- 订阅了navigation、Navigated和NavigationFailed(因为没有其他选项)事件,以查看它是否在任何时候触发以加载logo.png。结果一无所获,它只为应用程序中进行的实际导航调用触发。我还订阅了所有的,我的意思是所有可从WebBrowser控件获得的事件。甚至是从UIElement继承的
- 尝试在COM包装器中包装WebBrowser,该包装器使用http://www.codeproject.com/Articles/157329/Http-Monitor-for-Webbrowser-Control它不适用于Windows Phone 8.0 Web浏览器控件。这仍然是一次很好的锻炼。它也不会收到对本地文件的请求
- 我检查的下一个选项是拦截来自JavaScript的所有请求,但发现许多帖子只解释了如何拦截所有AJAX请求,这不是我想做的
- 然后,我实现了拦截所有AJAX请求的方法,看看它是否会让我对我可能做的事情有一些了解。然后我也做了这个[你如何在EmberJs应用程序中拦截所有HTTP请求?蚂蚁也没有帮助,然后我查看了intercept.js并尝试使用它,但logo.png再次错过了intercept.js
- 我是一名Windows Phone.NET开发人员,除了6个月将HTML5应用程序包装到cordova之外,我对JavaScript没有任何经验。我回到Windows Phone代码,试图在导航离开WebBrowser控件时捕捉导航。我试图覆盖所有特定于WebBrowser的方法,并试图取消任何和所有请求,只是想看看logo.png是否仍会出现在浏览器中,它确实做到了:(
如果我不研究这个问题,我就不会问这个问题。一些JavaScript开发人员表示,他们认为从应用程序内部来看这是不可能的,许多C++开发人员表示我应该查看WebBrowser控件的本地代码实现,找出它扩展了哪些接口,并以某种方式获得它的扩展。我明天一整天都会尝试这样做,但如果有(希望)一种简单的方法的话,我不想过度处理这种情况。
我的下一步是使用fiddler或charles之类的工具通过代理监视所有数据包。如果我可以通过这些工具中的任何一个看到对本地文件的请求,那么一定有一种方法可以在代码中拦截这些请求。如果成功,我将尝试在运行时设置一个本地代理,并通过我的文件处理程序重定向。
我和一些iOS开发人员谈过,他们使用了NSURLProtocol,你只需要设置它,就可以监控所有的流量(Lucky)。Windows Phone 8.0有类似的功能吗?有人对我如何在Windows Phone 8.0上实现这一点有什么建议吗?有什么方法可以拦截来自html5应用程序的所有请求吗。任何方式都可以,我很有信心,如果不起作用,我将能够实施任何建议并给出反馈。最大的问题是这是否可能。
如有任何反馈,我们将不胜感激,并将遵照执行任何建议。我将对此建议提供反馈。
提前谢谢你,我知道这里有一些严肃的代码忍者,会给我一百万个选择:)
我找到了一个非常简单的解决方案。由于Mobile IE10不提供拦截网页请求的功能,我偏离了该路径,选择不拦截请求,而是重定向请求。
我在手机上设置了一个套接字服务器,并从本地主机请求HTML5应用程序中的资产。这里有一个例子:
我在index.html中使用的一个文件,如下面的
<img src="logo.png" />
我换了
<img src="http://localhost:99/logo.png" />
通过这种方式,您可以在套接字服务器中触发一个Process请求事件,在那里您可以适当地处理您的资产请求。您可以在socket服务器中使用一个简单的映射来获取logo.png并返回一个具有不同名称的图像,这正是我需要做的
我希望这能帮助人们处理同样的问题:)