Wolfram mathematica 为什么我会收到安全警告信息;此文件包含可能不安全的动态内容“;在这个结构中

Wolfram mathematica 为什么我会收到安全警告信息;此文件包含可能不安全的动态内容“;在这个结构中,wolfram-mathematica,Wolfram Mathematica,我终于能够重现我偶尔收到的信息 这在V8.04和windows 7上都有体现 在尝试的过程中,我发现了如何让Mathematica在打开一个带有操纵的笔记本时生成上述消息 首先显示错误消息屏幕: 我现在点击“启用动态”,一切似乎都很好。但每次我重新打开笔记本,我都会再次收到信息。(必须关闭M,然后重新启动,然后打开笔记本以查看消息) 所以我不明白这个警告消息,为什么会出现,以及我需要在代码中修改什么来删除它 生成它的代码是: Manipulate[ DynamicModule[{p},

我终于能够重现我偶尔收到的信息

这在V8.04和windows 7上都有体现

在尝试的过程中,我发现了如何让Mathematica在打开一个带有操纵的笔记本时生成上述消息

首先显示错误消息屏幕:

我现在点击“启用动态”,一切似乎都很好。但每次我重新打开笔记本,我都会再次收到信息。(必须关闭M,然后重新启动,然后打开笔记本以查看消息)

所以我不明白这个警告消息,为什么会出现,以及我需要在代码中修改什么来删除它

生成它的代码是:

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[]
  • 输入以进行评估
  • 拯救
  • 接近M
  • 开放式M
  • 打开笔记本
  • 无误
  • 2001年12月21日更新

    关于数学组,约翰·富尔茨(John Fultz)很友好地回复了我的帖子,我想他不会介意我将他的答案发布在这里,以便于其他人看到

    > > 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