我用HTML5 / JavaScript编写了一个应用程序,并将其作为OS X Web视图嵌入。它有效并且目前在Web应用程序中内置了一个设置区域,也可以使用。
我的问题是,是否可以使用原生OS X样式首选项面板(App Name> Preferences)来调整Web应用程序的设置?
网络应用程序使用JavaScript变量进行设置。 OS X首选项面板必须读取JavaScript变量,允许它们进行调整,然后在保存时更新它们。
示例网络代码(test.html):
<p>Number of widgets (sample setting):
<input type="button" id="buttonLessWidgets" value="<">
<span id="divNumWidgets"></span>
<input type="button" id="buttonMoreWidgets" value=">">
</p>
<script>
var numWidgets = 10;
// Display current number of widgets when the app is opened
document.getElementById("divNumWidgets").innerHTML = numWidgets;
// Adjust sample setting --- this is the part I'm hoping to move to the preferences panel
buttonLessWidgets.onclick = function() {
numWidgets -= 1;
divNumWidgets.innerHTML = numWidgets;
};
buttonMoreWidgets.onclick = function() {
numWidgets += 1;
divNumWidgets.innerHTML = numWidgets;
};
</script>
这是我可以轻松实现的吗?我对HTML5和JavaScript很满意,但我是Xcode的新手。
答案 0 :(得分:1)
非常可能,但它需要你的一些工作,并没有自动的方法来做到这一点。至于实现自定义首选项窗格,这不在单个问题的范围内,您可以在其他地方找到材料。但是,实际的JavaScript部分并不算太差。
WebView类提供了一个windowScriptObject
方法,您可以调用该方法来获取对JavaScript环境的引用。然后,您可以使用标准setValue:forKey:
和valueForKey:
方法在JavaScript上下文中获取和设置全局变量。
通过向Web视图的setFrameLoadDelegate:
方法提供自定义WebFrameLoadDelegate,然后利用传递给webView:didClearWindowObject:forFrame:
委托方法的WebScriptObject上下文,可以在实际加载之前将这些值注入页面。只要JavaScript上下文可用,但在页面实际加载之前,就会调用此方法,以允许您插入自定义首选项变量。