2

我想知道如何使用共享/操作擴展來截取iOS主機應用程序的屏幕截圖。使用iOS共享/動作擴展來截取主機應用程序的屏幕截圖?

我的使用情況如下:

  1. 使用Safari瀏覽器訪問一個網頁(HTTPS如Gmail)
  2. 水龍頭上的分享按鈕,然後選擇
  3. 擴展將採取延長當前網頁的屏幕截圖

該用例的一個工作示例是Awesome Screenshot iOS app

我曾試圖在一個UIWebView/WKWebkit以下方法

  1. 重裝基本URI(的loadRequest)(將不能訪問HTTPS內容,如Gmail)。所以沒有做任何重載(真棒截圖是不是做BTW一重裝)
  2. 使用的ExtensionPreprocessingJS通過arguments.completionFunction函數來獲取DOM內容。我無法在這裏提取document.body,儘管我可以通過baseURI獲取源代碼等loadHTMLString會弄亂表示層。
  3. 在ExtensionPreprocessingJS用於html2canvas獲得的圖像,並將其附加到宿主應用程序的網頁作爲一個孩子,但不知道如何提取它。此外,一些網頁(例如Gmail)丟失了圖像。
  4. Mobile Safari沒有visibleContentsAsDataURL方法。

我認爲一種可行的方法是使用ExtensionPreprocessingJS中的html2canvas,但是如何以某種方式保存該圖像?

+0

你解決這個問題? – Andres

+0

@安德烈斯,不是那麼......你的想法是什麼? –

+0

到目前爲止我不知道!我會發布答案如果我找出如何做到這一點! :) – Andres

回答

1

編輯:所以下面的工程在模擬器中,但不是工作在設備上。我目前正在尋找解決方案。

下面是我覺得真棒截圖應用程序使用的解決方案:

func captureScreen() -> UIImage 
{ 
    // Get the "screenshot" view. 
    let view = UIScreen.mainScreen().snapshotViewAfterScreenUpdates(false) 

    // Add the screenshot view as a subview of the ShareViewController's view. 
    self.view.addSubview(view); 

    // Now screenshot *this* view. 
    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, false, 0); 
    self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true) 
    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    // Finally, remove the subview. 
    view.removeFromSuperview() 

    return image 
} 
+0

感謝您的想法!從我所蒐集的內容來看,重點應放在預處理JS上,它負責抓取所有要顯示的內容。 –