这可能是一个简单的,但我无法弄清楚。如何像window.open()
在 Javascript 中一样从扩展脚本在主浏览器中打开网页?
我的目标是 After Effects,并希望它可以在 OS X 和 Windows 上运行。
这可能是一个简单的,但我无法弄清楚。如何像window.open()
在 Javascript 中一样从扩展脚本在主浏览器中打开网页?
我的目标是 After Effects,并希望它可以在 OS X 和 Windows 上运行。
正如 Dirk 所提到的,在 After Effects 中,您可以简单地使用系统对象来完成它。但是,您需要几件事:
检查脚本是否可以访问网络:
if (app.preferences.getPrefAsLong("Main Pref Section", "Pref_SCRIPTING_FILE_NETWORK_SECURITY") != 1)
{
alert("Please tick the \"Allow Scripts to Write Files and Access Network\" checkbox if Preferences > General");
// Then open Preferences > General to let people tick the checkbox
app.executeCommand(2359);
// Here you should check again if they ticked it, and choose to continue or stop ...
}
检查操作系统:
var os = system.osName;
if (!os.length)
{
// I never remember which one is available, but I think $.os always is, you'll have to check
os = $.os;
}
app_os = ( os.indexOf("Win") != -1 ) ? "Win" : "Mac"
操作系统相关的系统调用:
var url = "http://aescripts.com";
if ( app_os == "Win" )
{
system.callSystem("explorer " + url);
}
else
{
system.callSystem("open " + url);
}
如果您可以访问 CSInterface.js:
cep.util.openURLInDefaultBrowser("http://www.google.com")
一种独立于应用程序的方法是将操作系统的 URL 表示写入文件,然后执行()该文件。
在 Mac 上,这将是一个 .webloc 文件。底层格式为“plist binary”,如果您更喜欢生成xml,请从浏览器地址拖放创建示例webloc并转换:
plutil -convert xml1 ~/Desktop/sample.webloc
要调用该 webloc,请运行 ExtendScript
File("~/Desktop/sample.webloc").execute()
您可以在本地计算机上执行任何操作 - 命令行和 VBS 文件中的任何其他内容,您可以从 javascript 启动 vbs 文件,如下所示:
function RunScriptVBS(whatscriptname){
app.doScript(File(whatscriptname), ScriptLanguage.VISUAL_BASIC);
}
这是您的 vbs 脚本:
Dim objShell
Set objShell = CreateObject("WScript.shell")
objShell.Run ("http://www.somewhere.com")
set objShell = nothing
问题的范围显然已经细化到 After Effects (AE),所以我添加了另一个特定于该应用程序的答案。
在我的机器上,AE CS6 不会生成对象模型文件以供 ExtendScript Toolkit 显示。请自行重试,对象模型查看器在ESTK的帮助菜单中。
无论如何,ESTK 数据浏览器确实有效。如果您以 AE 为目标,您将看到几个对象和类。最后检查数据浏览器面板弹出菜单中的更多菜单项。我更深入地查看了应用程序对象本身(那里没有 openUrl()),还发现了一个“系统”对象。展开它,你会看到几个有趣的方法。
以下脚本在 Mac 上打开一个 URL。我没有尝试过Windows,也许它甚至是一样的。
system.callSystem("open http://www.google.com")
由于这是我第一次启动 AfterEffects,我可能错过了更好的方法。