我正在写与MonoTouch的一款iOS应用,确实有一个UIWebView一些JavaScript交互中。出于调试的目的,能够在UIWebView中运行的JavaScript中捕获console.log
以及应用程序输出的其余部分会很好。这可能吗?使用常规Objective-C代码的例子也是可以的。捕获的console.log一个UIWebView
4
A
回答
3
经过一些google搜索,我来到了这个答案:Javascript console.log() in an iOS UIWebView
将其转换为MonoTouch的产生此解决方案:
using System;
using System.Web;
using System.Json;
using MonoTouch.UIKit;
namespace View
{
public class JsBridgeWebView : UIWebView
{
public object BridgeDelegate {get;set;}
private const string BRIDGE_JS = @"
function invokeNative(functionName, args) {
var iframe = document.createElement('IFRAME');
iframe.setAttribute('src', 'jsbridge://' + functionName + '#' + JSON.stringify(args));
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
iframe = null;
}
var console = {
log: function(msg) {
invokeNative('Log', [msg]);
}
};
";
public JsBridgeWebView()
{
ShouldStartLoad += LoadHandler;
LoadFinished += (sender, e) => {
EvaluateJavascript(BRIDGE_JS);
};
}
public bool LoadHandler (UIWebView webView, MonoTouch.Foundation.NSUrlRequest request, UIWebViewNavigationType navigationType)
{
var url = request.Url;
if(url.Scheme.Equals("jsbridge")) {
var func = url.Host;
if(func.Equals("Log")) {
// console.log
var args = JsonObject.Parse(HttpUtility.UrlDecode(url.Fragment));
var msg = (string)args[0];
Console.WriteLine(msg);
return false;
}
return true;
}
}
}
}
现在所有console.log
语句在JavaScript中UIWebView
将被发送到Console.WriteLine
。这当然可以扩展到任何想要的输出。
1
你可以添加JavaScript代码,它是这样的覆盖方法:
console.log = function(var text) {
consoleforios += text;
}
然后,从Web视图,请致电:
string console = webView.EvaluatingJavaScript("return consoleforios;");
这可能不是什么我要离开永久的,但它应该工作。
相关问题
- 1. 捕获javascript console.log?
- 2. Casperjs捕获console.log和console.error
- 3. UIWebView - 捕获点击
- 4. UIWebView捕获帖子
- 5. iOS UIWebView中的Javascript console.log()
- 6. 获得一个UIWebView
- 7. 在UIWebView中捕获触摸
- 8. 捕获UIWebview重新加载
- 9. 通过UIWebView捕获手势
- 10. 从UIWebView捕获信息
- 11. 如何每一个UIWebView加载请求时捕获一个事件?
- 12. 捕获一个GenericJDBCException
- 13. 从UIWebView捕获打印请求
- 14. 在后台捕获UIWebview作为UIImage
- 15. console.log(variable); VS console.log([variable]); /一个给信息另一个不?
- 16. 获取值从一个UIWebView在iOS的
- 17. 试图捕获console.log来自YouTube的消息<iframe>
- 18. 如何从node.js中将console.log捕获到我的php网页?
- 19. 从一个UIWebView
- 20. 有一个UIWebView
- 21. 在一个UIWebView
- 22. 由一个UIWebView
- 23. 上一个UIWebView
- 24. grep捕获一个词组
- 25. 捕获最后一个WM_SIZE
- 26. “未捕获HierarchyRequestError:一个createTextNode
- 27. 如何将多个子模式捕获到一个捕获?
- 28. 可能将一个捕获组的一部分捕获到第二个捕获组中?
- 29. 捕获javascript对象发送洛杉矶console.log
- 30. 获取UIWebView的
这是一个选项,但不是我一直在寻找的东西。 – NilsH