2017-03-07 126 views
2

我有一個網站,第三方iframed進入他們的iOS應用程序內部的WkWebView。我的網站上有一個錯誤,只有在此應用程序中查看時纔會顯示。我無法通過瀏覽器或專門爲檢查錯誤而構建的獨立iOS應用程序來複制它。爲了繼續解決該錯誤,我需要能夠調試在應用程序中實時運行的JavaScript。如果我有應用程序的調試版本,這將非常簡單:只需將它連接到Safari的遠程調試器,但由於安全限制,應用程序開發人員無法向我發佈調試版本。如何在iOS應用程序WkWebView中調試JavaScript?

在這些情況下調試javascript有哪些選項?

  • 不能改變應用程序代碼
  • 必須使用應用
  • 的一個發佈版本工作在最低限度,查看日誌或,優選地,暴露的功能相當於一個瀏覽器開發者控制檯:
    • 附加斷點
    • 步驟通過碼
    • 視圖DOM
    • 視圖控制檯輸出
  • 導入JavaScript庫到我的網站,使這是可以接受的,但我寧願在基於工具的解決方案基於代碼的一個

回答

0

您可以通過發送一個得到你想要的數據使用相關的調試信息向您的服務器發送HTTP請求。這有點令人討厭,因爲它適用於您的生產站點上的所有用戶,並且如果您可以將Safari附加到調試中,您將擁有的功能遠不及您所需,但可能適用於此特定情況。

一些基本的JS提供瞭如何可能會圍繞發送頁面加載和/或用戶事件觸發的總體思路事件:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width"> 
    <title>JS Bin</title> 
</head> 
<body> 
<button>Click Me</button> 
    <script> 
    var sendDebug = function(simpleObject) { 
     var serializedObject = JSON.stringify(simpleObject); 
     var iPhone = navigator.userAgent.indexOf('iPhone') > 0; 
     var xhr = new XMLHttpRequest(); 
     xhr.open('GET', `https://null.jsbin.com?iphone=${iPhone}&info=${serializedObject}`); 
     xhr.send(null); 
    } 
    document.querySelector('button').addEventListener('click', function() { 
     sendDebug('clicked the button'); 
    }) 
    sendDebug('page loaded'); 
    </script> 
</body> 
</html> 

我包括基於該navigator.userAgentiPhone布爾;你可以考慮只爲iPhone發送數據,這樣你就不會在非iPhone請求中混淆日誌(注意userAgent可以從應用程序中修改,所以你需要仔細檢查它們發送的內容)。儘管取決於您處理的流量,但這可能不夠節流。

這將創建HTTP請求並將調試數據附加到查詢字符串。這些應該是在你的訪問日誌中可見的服務器上:

https://null.jsbin.com/?iphone=false&info=%22clicked%20the%20button%22

http://jsbin.com/novowoduka/edit?html,output

0

您可以將Safari的開發工具,從Mac到iOS應用。從那裏,您可以在您的網頁視圖中調試javascript,並查看您在Mac上在Safari中測試任何網站時可能看到的任何內容。

高級步驟是:在你的應用程序

+0

除非Apple在最新版本的iOS中進行了更改,否則該功能僅適用於應用程序的調試版本,而不適用於通過應用商店獲取的應用程序。 – asgallant

+0

鏈接到Apple文檔已損壞 – dsjoerg