Javascript iOS JS类对象注入WebView

Javascript iOS JS类对象注入WebView,javascript,ios,uiwebview,Javascript,Ios,Uiwebview,我正在尝试将JS注入UIWebView。在某种程度上,一切都很有魅力: 在viewDidLoad中,我将一个HTML按钮加载到WebView: NSString *loadedHTML = <input type='button' onclick='test();' value='test'/>; [_webView loadHTMLString:loadedHTML baseURL:nil]; 这很好用 现在我需要创建一个类似的函数,但它必须位于对象内部。我尝试的是: 更改H

我正在尝试将JS注入UIWebView。在某种程度上,一切都很有魅力:


viewDidLoad
中,我将一个HTML按钮加载到WebView:

NSString *loadedHTML = <input type='button' onclick='test();' value='test'/>;
[_webView loadHTMLString:loadedHTML baseURL:nil];
这很好用


现在我需要创建一个类似的函数,但它必须位于对象内部。我尝试的是:

更改HTML,以便按钮调用对象函数:

NSString *jsScript = 
@"var test = function() {alert('not in class')};"
@"document.getElementsByTagName('head')[0].appendChild(test);";

[webView stringByEvaluatingJavaScriptFromString:jsScript];
loadedHTML = <input type='button' onclick='myObject.test();' value='test'/>;

它什么也不做。我尝试在中创建对象,将
myObject.test
附加到文档中-没有任何帮助。我做错了什么?

工作中发生的事情是创建一个JS对象,如下所示:

var myObject = {
   test: function() {alert('in class!')}
}

然后,调用
myObject.test()
函数就可以了。

下面是一些适合我的代码:

NSString *jsScript =
@"var script = document.createElement('script');"
@"    script.type = 'text/javascript';"
@"    script.text = '"
@"        var myObject = (function() {"
@"            return {"
@"                test: function() {"
@"                    alert(\"foo\");"
@"                }"
@"            }"
@"        })();"
@"';"
@"document.getElementsByTagName('head')[0].appendChild(script);";

NSString *result = [self.webMain stringByEvaluatingJavaScriptFromString:jsScript];
区别(主要)在于创建要添加到DOM的脚本元素。我对JS代码本身做了一个小改动,使用了一种我更喜欢的样式,用于带有方法的对象


不过,我通常会提出一个建议,即从参考资料中加载Javascript文件。如果这对您有用,那么从单独的文件中读取和调试Javascript要简单得多,而不是在Objective-C中嵌入脚本时使用所有混乱的引用来编写脚本。

最后我就是这样做的。无论如何,谢谢你。
NSString *jsScript =
@"var script = document.createElement('script');"
@"    script.type = 'text/javascript';"
@"    script.text = '"
@"        var myObject = (function() {"
@"            return {"
@"                test: function() {"
@"                    alert(\"foo\");"
@"                }"
@"            }"
@"        })();"
@"';"
@"document.getElementsByTagName('head')[0].appendChild(script);";

NSString *result = [self.webMain stringByEvaluatingJavaScriptFromString:jsScript];