Wolfram mathematica 为什么我会收到安全警告信息;此文件包含可能不安全的动态内容“;在这个结构中
我终于能够重现我偶尔收到的信息 这在V8.04和windows 7上都有体现 在尝试的过程中,我发现了如何让Mathematica在打开一个带有操纵的笔记本时生成上述消息 首先显示错误消息屏幕: 我现在点击“启用动态”,一切似乎都很好。但每次我重新打开笔记本,我都会再次收到信息。(必须关闭M,然后重新启动,然后打开笔记本以查看消息) 所以我不明白这个警告消息,为什么会出现,以及我需要在代码中修改什么来删除它 生成它的代码是:Wolfram mathematica 为什么我会收到安全警告信息;此文件包含可能不安全的动态内容“;在这个结构中,wolfram-mathematica,Wolfram Mathematica,我终于能够重现我偶尔收到的信息 这在V8.04和windows 7上都有体现 在尝试的过程中,我发现了如何让Mathematica在打开一个带有操纵的笔记本时生成上述消息 首先显示错误消息屏幕: 我现在点击“启用动态”,一切似乎都很好。但每次我重新打开笔记本,我都会再次收到信息。(必须关闭M,然后重新启动,然后打开笔记本以查看消息) 所以我不明白这个警告消息,为什么会出现,以及我需要在代码中修改什么来删除它 生成它的代码是: Manipulate[ DynamicModule[{p},
Manipulate[
DynamicModule[{p},
p["x"] = 0;
Row[{Dynamic[
Refresh[p["x"]++; Row[{"p[x]=", p["x"]}],
TrackedSymbols -> {n}]]}]
],
Button["update counter", n++],
{{n,0}, None}
]
上面的内容在自己的笔记本上,笔记本上没有其他内容
我关闭M,然后启动它,然后打开笔记本,我看到上面的消息
现在,我最初认为要删除该消息,我需要将p[“x”]更改为p[x],因此我关闭了上述笔记本,并用以下代码制作了一个新笔记本:
Manipulate[
DynamicModule[{p},
p = 0;
Row[{Dynamic[Refresh[p++; Row[{"p=", p}], TrackedSymbols -> {n}]]}]
],
Button["update counter", n++],
{{n, 0}, None}
]
然后关闭M,重新启动,打开上面的笔记本,
现在我没有看到警告信息。但当我重复这个过程时,我看到同样的错误再次出现
(我把这个问题发到了数学组,但速度很慢,我的帖子甚至没有出现在那里,但在那篇帖子中我说,当我把p[“x”]改为p[x]时,错误消失了,因为一开始它确实出现了,但当我后来尝试时,信息又回来了,我不明白为什么)
p[“x”]是一个索引对象,如本页所述:
问题是:上述代码中的什么内容会显示此警告?我在上面的例子中写错了什么吗?
启用动态后代码运行正常。顺便说一句,我打开这个笔记本的文件夹与打开其他笔记本的文件夹相同,没有任何更改,这是在家用电脑上,没有网络共享文件夹,也没有任何异常
以下是有关笔记本电脑安全性的链接
我在上面没有看到任何与我正在做的事情相关的东西。我所能说的是,它与在操纵内使用DynamicModule[]有关,操纵本身就是一个DynamicModule。但我对这一点理解不够透彻,无法理解为什么这是一个问题
更新1
我看不出这和路径有什么关系。我可以通过简单地注释内部动态来消除错误,如下所示:
Manipulate[
(*
DynamicModule[{p},
p["x"]=0;
Row[{Dynamic[Refresh[p["x"]++;Row[{"p[x]=",p["x"]}],TrackedSymbols-> \
{n}]]}]
],
*)
n,
Button["update counter", n++],
{{n, 0}, None}
]
保存笔记本,关闭M,启动M,打开笔记本。错误消失了
所以,它在代码中
更新2
我无法复制尤达在回答中所报告的内容
Dynamic@DateString[]
> > So, why is using p["x"] causing the security warning message?
That is a bug, which has already been fixed in development sources.
John Fultz
User Interface Group
Wolfram Research, Inc.
很抱歉,我没有一个链接,包括他的答复,我无法找到一个链接在谷歌现在。我用雷鸟阅读新闻组
现在这个问题是否应该留待讨论?还是应该关闭?如果我需要关闭它,我可以接受其中一个答案,这样它就关闭了。这不是因为特定的代码示例,而是因为Mathematica的安全功能。从 当用户打开包含动态内容的笔记本时,Mathematica 将首先确定笔记本的目录是否受信任, 不可信,或者两者都不可信
- 如果笔记本的目录受信任,则允许笔记本自动执行动态评估,而无需发出警报 用户
- 如果笔记本的目录不受信任,则当笔记本试图执行动态评估时,会提醒用户。
$InstallationDirectory
、$BaseDirectory
和$UserBaseDirectory
是“受信任的”。此外,还有一组目录始终不受信任(可以更改)。这些是您的下载内容现在的解决方案是将当前工作目录添加到受信任文件夹列表中 转到
Preferences>Advanced>openoptions Inspector
并在Global Preferences
下开始搜索trusted
,您会看到三个选项弹出。你可以在这里添加它们
这与其说是一个单独的答案,不如说是Yoda答案的延续加上注释,但正如前面所述,如果您从不受信任的目录打开笔记本,并且输出单元格中有动态内容,您将收到安全警告。如果评估以下代码:
CurrentValue[$FrontEnd, {"NotebookSecurityOptions", "TrustedPath"}]
CurrentValue[$FrontEnd, {"NotebookSecurityOptions", "UntrustedPath"}]
NotebookDirectory[]
您将能够确定您的笔记本是否位于受信任或不受信任的路径(无论是否出现安全警告)。假设您使用默认选项设置(即“TrustByDefault”->自动),您将看到三种行为之一
- 如果笔记本位于“TrustedPath”中列出的目录中,则假定内容是安全的,您将永远不会看到警告
- 如果笔记本位于“不可信路径”中列出的目录中,则假定内容不安全,您将始终看到警告
- 如果笔记本位于既不在“TrustedPath”中也不在“UntrustedPath”中列出的目录中,则根据笔记本中存储的DynamicBox表达式的内容,您可能会看到或可能不会看到警告。Mathematica将在尝试计算表达式之前检查它。如果它只包含“安全”表达式的简短白名单中的表达式,则不会看到警告。如果它包含任何表达式wh