Я пытаюсь заглушить 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 и другими полями. Почему это может случиться и как я могу избежать этого?