English 中文(简体)
绕过“仇恨必须成为用户引起的”例外的任何方式?
原标题:Any way to circumvent "Dialogs must be user-initiated" exception?

我的口号是公开的。 在启动开放基金之前,它询问用户是否希望拯救现有档案,如果是,它会发射一个拯救基金。 然后发射开放式散射。 标准 st。

我的问题是,银灯然后看着开放基金。 淋浴法并非用户启动,我接受安全检查。

是否有任何已知的合理办法避免这一例外? 这肯定是一种相对标准的情况?

该信属于浏览器。

任何观点都受到欢迎。

EDIT:

Sorry, not allowed to release actual code :( The logic is pretty simple though: In psuedocode the OpenFile" button press event calls a method something like:

*Launch a new SL message asking whether to save first.

*On message window yes/no clicked: -If No, Go to Load -If Yes, Launch SaveFileDialog.ShowDialog(), go to Load

*Load: Launch An Open File Dialog

EDIT 2: Mini programme...

XML content for the main page:

<Grid x:Name="LayoutRoot" Background="White">
    <Button Content="Open" Click="Button_Click"/>
</Grid>

法典:

using System.Windows;
using System.Windows.Controls;

namespace SilverlightApplication15
{
public partial class MainPage : UserControl
{
    AskWindow aw = new AskWindow();

    public MainPage()
    {
        InitializeComponent();
        aw.Closed += new System.EventHandler(aw_Closed);
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        aw.Show();
    }

    private void aw_Closed(object sender, System.EventArgs e)
    {
        if (aw.DialogResult == true)
        {
            SaveFileDialog svd = new SaveFileDialog();
            svd.ShowDialog();
        }


        OpenFileDialog ofd = new OpenFileDialog();
        ofd.ShowDialog();//Causes security exception
    }
}

public class AskWindow : ChildWindow
{
    public AskWindow()
    {
        Button b = new System.Windows.Controls.Button();
        b.Click += new System.Windows.RoutedEventHandler(b_Click);
        b.Content = "Yes, save it";
        this.Content = b;
    }

    private void b_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        this.DialogResult = true;
    }
}
}
最佳回答

这可能是desktop application的一个标准假设情景,但你是制造桌面应用程序的。 你们正在建立一个安全沙箱的部件,而且由于良好原因,这些部件受到一些相当严格的限制。

处理这种情况的办法没有动摇。 您可以提供近似的“文件”特征,该特征将登上确认箱,警告继续工作将失去作用。

In an attempt to open another "document" whilst the current is unsaved all you can do is display message instructing the user on their choices, either close the current "document" and abandon its changes or to choose to save. The user will have to manually perform these actions and then choose again to open a "document".

如果贵方支持多份“公开”文件,至少用户会因公开“文件”而征税,那么你就能够改善情况。

问题回答

回答您的问题的一个简短答案是NO",造成第二位Dialog isn 'tuser-initiated anymore for theqalight potime。 如果你在开方道歉之前展示一种电文Box,情况也是如此。

http://msdn.microsoft.com/en-us/library/ff382752%28v=vs.95%29.aspx” rel=“nofollow noreferer”MSDN关于对Dialogs的安保限制。

为了安全起见,如果银灯申请是沙箱式应用,则必须使用文档和印刷方言箱。 这意味着,你必须从用户发起的行动中,例如点击事件手向纽州展示。 如果你试图从非用户那里展示一个方言箱,就会出现安全观。 此外,在用户启动方言和显示方言之间,时间有限。 如果这些行动之间的时间限制超过,将出现例外。 当你使用视频演播室的挖尸首时,如果你在制作方言和展示方言箱之间打断点,就会扔下安全观。 由于用户发起的限制,这是预期的行为。 如果你在要求展示会后打断点,就不会有例外。

如果你试图从KitDown事件处理器和其他同步电话中显示方言,以适用代码,如LayoutUpdated或SizeChanged事件处理器,则将提出例外。 然而,在互联网探索者以受保护的方式主办申请时,不会出现例外。

当插头充气时,银灯泡对方言箱的支持有限。 在大多数情况下,以完全筛选的方式展示方言箱,将使pl子重新回到嵌入模式。 然而,为了避免某些浏览器出现问题,在使用这些班子之前,你应退出完全筛选模式。 在浏览器以外的银灯应用中,你可以向用户显示一种迅速的信号,使方言箱能够完全筛选。 此外,用户启动限制也因可信赖的申请而放宽。 欲了解更多信息,请查阅申请。

时限可以很容易地用以下代码测试:

private void OpenDialog(object sender, RoutedEventArgs e) {
  MessageBox.Show("test");

  OpenFileDialog fileDialog = new OpenFileDialog();
  var result = fileDialog.ShowDialog();
}

当电文Box展示时,当你真心地击中“Enter”-Key时,露天会随后展示,没有安全例外。 但是,如果你在关闭电文Box之后将电文开放一段时间,就会提出安全观。

我认为,时间限制是两个方言的问题,造成时间限制超过第一个。

You should be showing SaveFileDialog in mouse Click handler immediately. In your case that would be in private void b_Click.

在 mo点和<代码>SaveFileDialog之间设置了一些障碍。





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签