我正在寫與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