0

我用 HTML5/JavaScript 编写了一个应用程序并将其嵌入为 OS X 网络视图。它可以工作,并且当前在 Web 应用程序中内置了一个设置区域,该区域也可以工作。

我的问题是,是否可以使用本机 OS X 样式首选项面板(应用程序名称 > 首选项)来调整网络应用程序的设置?

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 的新手。

4

1 回答 1

1

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

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

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

于 2013-02-12T04:48:15.053 回答