【问题标题】:OS X Web View App - Is it possible to use the native Preferences panel to adjust JavaScript variables?OS X Web View App - 是否可以使用本机首选项面板来调整 JavaScript 变量?
【发布时间】:2013-02-12 04:36:03
【问题描述】:

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

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

网络应用程序使用 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 的新手。

【问题讨论】:

  • NSUserDefaults 提供了一种简单的方法来保存这样的设置,您可以使用 Cocoa Bindings 和共享用户默认控制器来相对轻松地构建用户界面。不过,我不清楚您打算如何将这些值添加到您的 Web 视图中。您目前如何从 Web 视图加载 JavaScript?

标签: macos cocoa webview


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多