OS X Web View应用程序 - 是否可以使用原生“首选项”面板调整JavaScript变量?

时间:2013-02-12 04:36:04

标签: macos cocoa webview

我用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="&lt;">
<span id="divNumWidgets"></span>
<input type="button" id="buttonMoreWidgets" value="&gt;">
</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的新手。

1 个答案:

答案 0 :(得分:1)

非常可能,但它需要你的一些工作,并没有自动的方法来做到这一点。至于实现自定义首选项窗格,这不在单个问题的范围内,您可以在其他地方找到材料。但是,实际的JavaScript部分并不算太差。

WebView类提供了一个windowScriptObject方法,您可以调用该方法来获取对JavaScript环境的引用。然后,您可以使用标准setValue:forKey:valueForKey:方法在JavaScript上下文中获取和设置全局变量。

通过向Web视图的setFrameLoadDelegate:方法提供自定义WebFrameLoadDelegate,然后利用传递给webView:didClearWindowObject:forFrame:委托方法的WebScriptObject上下文,可以在实际加载之前将这些值注入页面。只要JavaScript上下文可用,但在页面实际加载之前,就会调用此方法,以允许您插入自定义首选项变量。