JavaScript-инъекция для WKWebView - PullRequest
       52

JavaScript-инъекция для WKWebView

0 голосов
/ 24 января 2019

Я пытаюсь заглушить getUserMedia для WKWebView таким образом. Файл JavaScript WKWebViewGetUserMediaShim.js:

 (function (exports) {
  exports.navigator.getUserMedia = getUserMedia;
  if(exports && exports.navigator && exports.navigator.mediaDevices && exports.navigator.mediaDevices.getUserMedia) {
    exports.navigator.mediaDevices.getUserMedia = getUserMedia;
  } else {
    exports.navigator.mediaDevices = {
        getUserMedia: getUserMedia
    };
  if (exports.navigator.randomGeneratedId == null) {
    exports.navigator.randomGeneratedId = Math.random();
  }})(window)

Код объективного C:

   NSString * path = [[NSBundle mainBundle].resourcePath stringByAppendingString:@"/WKWebViewGetUserMediaShim.js"];
   NSString * bindingJs = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
   WKUserScript * script = [[WKUserScript alloc] initWithSource:bindingJs injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
   [controller addUserScript:script]; //controller is WKUserContentController

Но я столкнулся с проблемой, в журнале консоли в JS я вижу два разных объекта window.navigator с разными полями randomGeneratedId и другими полями. Почему это может случиться и как я могу избежать этого?

...