Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在UIWebView-iOS加载的iframe中注入javascript_Javascript_Ios_Iframe_Uiwebview - Fatal编程技术网

如何在UIWebView-iOS加载的iframe中注入javascript

如何在UIWebView-iOS加载的iframe中注入javascript,javascript,ios,iframe,uiwebview,Javascript,Ios,Iframe,Uiwebview,我正在UIWebView上收听此委托方法: - (void)webViewDidFinishLoad:(UIWebView *)aWebView 在此基础上,我使用 [aWebView stringByEvaluatingJavaScriptFromString:myscript]; 虽然委托方法适合侦听iframe请求的结尾,但我的js似乎不适用于iframe。它适用于uiwebview的主文档 有没有办法做到这一点:如何在iOSUIWebView对象的iFrame上注入js 谢谢你的建议

我正在
UIWebView
上收听此委托方法:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
在此基础上,我使用

[aWebView stringByEvaluatingJavaScriptFromString:myscript];
虽然委托方法适合侦听iframe请求的结尾,但我的js似乎不适用于iframe。它适用于uiwebview的主文档

有没有办法做到这一点:如何在iOS
UIWebView
对象的iFrame上注入js


谢谢你的建议。

问题在你的JS中。您可以在iframe对象上运行操作,在问题中的“myscript”中,您需要在

document.getElementsByTagName('iframe')[0].contentWindow

反对。或者,如果您没有引用UIWebView中的第一个iframe,请使用另一个选择器来引用您尝试引用的iframe。

除非有我不知道的iOS API,您只能通过调用
stringByEvaluatingJavaScriptFromString:myscript
在顶级文档的上下文中执行Javascript

幸运的是,自2013年(最后一个答案编写时)以来,我们现在有了和,它允许您在iframe中生成一个不可提取的密钥,并使用将公钥传递给iOS。每个iframe都应该接收一个唯一的id,并通过
窗口.location.hash
postMessage
告知它是什么。它应该将这个id发送到本机代码,以及本机调用的唯一索引/键和用于编码内容的公钥。(本机代码还可以检查消息上的
iframeInfo
,以确保请求来自正确的域。)最后,本机代码可以在WebView上调用
stringByEvaluatingJavaScriptFromString:myscript
,并传递使用公钥加密的有效负载,连同iframe的id和all的索引/键一起,使用
postMessage
发送到iframe。iframe将对其进行解码,并调用相应的回调函数。您可以使用iframes以这种方式实现一个完整的类似Cordova的桥接器

请注意,顶级文档的作者选择呈现iframe,因此没有动机干扰消息的传递。但是,消息必须加密,因为他们可能有强烈的动机窃取信息


PS:如果您担心量子计算机破坏加密,那么您可能必须使用对称密钥而不是公私密钥对,或者干脆不将公钥与有效负载一起发送:)

由于跨域安全限制而无法访问的iFrame如何?