25

我開發的HTML這是從JavaScript調用的console.log()給我提供有關在網頁代碼會發生什麼情況的發展過程中記錄的應用程序。的Javascript的console.log()在HTC Android設備和亞行logcat

不幸的是,當我使用adb logcat命令檢查日誌,我可以看到輸出的所有其他應用程序,而不是從我的JavaScript代碼的輸出。我甚至可以從Web瀏覽器看到該頁面已加載的日誌,但不能從Web瀏覽器中執行的JavaScript代碼輸出console.log()

據對this pagehttp://developer.android.com/guide/webapps/debugging.html),它應該工作的信息。

我正在測試HTC WildFireHTC Desire HD


更多然後6個月

經過一段時間和經驗與不同的設備後,編輯(手機,電視,機頂盒,網頁視圖,UIWebViews中......)我的建議是做遠程登錄從JavaScript,而不是依靠的console.log()或其他方法 - 看到好的技巧與圖像加載here

不要錯過演示here 希望這有助於! 斯登

+0

請提供您的代碼。您是否嘗試過上面張貼的頁面? – Thorben 2011-04-04 12:39:24

+0

嗨,我只從多個地方調用JavaScript的console.log()方法,例如** console.log(「[轉到詳細信息]」); **,僅此而已。順便說一句。我正在使用Sencha Touch框架,但不應該影響任何東西... – STeN 2011-04-04 13:35:54

+0

我正在使用HTC Droid Incredible,並且無法使console.log正常工作。當我使用模擬器時,console.log可以正常工作,並將所有內容都路由到logcat,但不是當我直接在設備上嘗試時。 – TheRightChoyce 2011-04-22 22:33:28

回答

29

在Android 2.3.3的默認瀏覽器(大概從那時起),你可以簡單地使用內置的JavaScript控制檯:

  • 打開瀏覽器
  • 去你的網頁
  • 在地址欄中
  • about:debug並回車
  • 你會看到調試選項的部分出現,如果你去到瀏覽器應用程序的設置
  • 勾選「顯示JavaScript控制檯」如果不是已經啓用
  • 刷新網頁

在頂部,你會看到標有「JavaScript控制檯」一欄。

+0

這非常酷。不幸的是,它似乎沒有在我擁有的任何Android設備上: 摩托羅拉Xoom WiFi運行Android 3.2 運行Android 2.2的三星Galaxy S(SGH-I897) 運行Android 2.1的三星Galaxy S(SGH-I897) 運行Android 2.1的Samsung Galaxy Tab(第一張) Javascript已啓用。 我似乎無法找到任何「官方」文檔。你知道我在哪裏可以找到一些?我想知道爲什麼我錯過了! 謝謝。 – Jonathan 2011-10-18 12:35:47

+1

謝謝thruflo!這適用於運行Android 2.3.6的Nexus S。我喜歡這個解決方案,因爲我可以繼續使用簡單的console.log()方法(我喜歡簡單;-),並且不需要添加JS日誌記錄框架。注意:輸入about:debug之後,我花了一分鐘才意識到Javascript控制檯可用。它顯示爲窗口頂部的細條。觸摸它可以擴展它。 – devdanke 2012-02-27 12:01:55

+0

** + 1 **我從來不知道'about:debug' – iConnor 2013-12-08 19:19:37

0

嘗試以下方法:

1)打開設備標籤,並確保您已連接的設備被選擇/高亮顯示。

2)確保您的設備上啓用了USB調試。以下是您需要做的事情:

2a)在主屏幕中,按菜單,然後點擊設置>應用程序>開發。 2b)確保選中USB調試複選框。

+0

在運行您的應用程序之前清除日誌。有時logCat緩衝區會變滿,並立即清除它們出現的所有日誌。 (他們看起來像一個閃光燈) – 2011-05-04 19:01:58

4

Logcat在設備上除了生成很多東西外,所以您可能必須對其進行過濾。

您可以嘗試的「grep」日誌輸出,如果你已經標記了。 例如:acording到您的文章,輸出應該是這樣的:

Console: Hello World http://www.example.com/hello.html :82 

如果您使用的命令(假設你使用的是在Linux,Mac OS或其他任何與grep命令)

adb logcat | grep -i "console" 

它會將輸出減少到這些引號內指定的關鍵字。如果你爲你的輸出添加一個唯一的標籤,你也可以過濾這個,這樣你只能得到你想要看到的東西。

[ctrl]+c 

將停止此logcat進程。

8

我有同樣的問題,我這樣做解決了下列文件:

1 /當你初始化的網頁視圖,添加Javascript橋類:

appView.addJavascriptInterface(new JSBridge(), "JSBridge"); 

2 /創建類JSBridge與日誌功能

class JSBridge { 
    public void log(String msg){ 
    Log.d(msg); 
    } 
} 

3在你的JavaScript /你現在可以調用

JSBridge.log("my log message"); 

可能是你的問題有點大材小用,但你也可以做更多的事情與解決方案

+0

在哪裏初始化你的web視圖,添加一個javascript橋樑類? – 2015-11-16 13:28:07

12

我已經使用了三種不同的HTC手機已幾乎只和從未有過這個問題。這裏有幾件事要檢查:

  1. 確保啓用了USB調試。
  2. 確保您的Webview具有WebChromeClient集。 Webview中使用的瀏覽器不實現console.log()。
  3. 應該很容易看到adb logcat的輸出,但爲了更容易,過濾輸出。

打開USB調試:

  1. 斷開您的設備從您的計算機。
  2. 轉到設置 - >應用程序 - >開發 - >選擇「啓用USB調試」
  3. 插件到計算機。 (請確保您有安裝正確的驅動程序使用亞行 - 更多的信息在這裏:http://developer.android.com/guide/developing/device.html

一套覆蓋onConsoleMessage()一WebChromeClient:

//Set the output prefix so you can filter adb logcat results later 
public static final String TAG = "Your-Application-Name"; 

myWebView = (WebView) findViewById(R.id.webview); 

//Not going to have much luck running JS without this: 
myWebView.getSettings().setJavaScriptEnabled(true); 

//Override onConsoleMessage() to output to the Log. 
myWebView.setWebChromeClient(new WebChromeClient() { 
    @Override 
    public boolean onConsoleMessage(ConsoleMessage cm) { 
     Log.d(TAG, cm.message() + " -- From line " 
     + cm.lineNumber() + " of " 
     + cm.sourceId()); 
     return true; 
    } 
}); 

上onConsoleMessage更多信息()這裏:http://developer.android.com/reference/android/webkit/WebChromeClient.html#onConsoleMessage(java.lang.String,INT,java.lang.String中)在一般的調試這裏

更多信息:http://developer.android.com/guide/webapps/debugging.html

篩選亞行logcat的輸出:

adb logcat tag-name:log-level *:S 

標籤名稱Log.x 日誌級別指定的字符串匹配呼叫日誌當您指定的日誌級別相匹配。X < ---

與上面的代碼示例:

adb logcat Your-Application-Name:D *:S 

這將顯示匹配的標籤,你-應用程序名稱的所有d級日誌和沉默一切。亞行過濾

此處瞭解詳情: http://developer.android.com/guide/developing/tools/adb.html#logcat

希望它能幫助!我知道這是對其他答案的總結,但事實是,它需要採取所有步驟才能實現。 :)

+0

我有一個HTC Desire 2.3.3吃了'console.log'輸出。使用'onConsoleMessage'甚至不能從js獲取日誌。 – Xiao 2013-06-28 08:57:47