activex outlook带来了前沿

时间:2015-04-20 14:23:35

标签: javascript internet-explorer outlook activex

如何将使用ActiveX从JavaScript打开的outlook应用程序放在前面。以下是我需要将outlook窗口置于顶部(即带到前面)的代码,因为它在I.E.后面打开。浏览器。

// Open outlook e-mail client application with the corresponding subject and the attachment link
function openOutlook(emailSubject, emailAttach) {
    try {
        var app = new ActiveXObject('Outlook.Application');
        var objNS = app.GetNameSpace('MAPI');
        var mailItem = app.CreateItem(0);
        mailItem.Subject = (emailSubject);
        mailItem.to = 'test@test.com';
        mailItem.display();
        mailItem.Attachments.add(emailAttach);
    }
    catch (ex) {
        alert('Outlook configuration error : ' + ex.message);
    }
}

到目前为止,我已尝试将 mailItem.display(); 更改为 mailItem.display(false); mailItem.display(true ); open-word-from-javascript-and-bring-to-front但它没有帮助,这里似乎有一个小问题,即当我以这种方式更改代码并运行应用程序时,Outlook窗口会出现在顶部,但如果我在另一个系统中打开它或者在重新启动系统后打开它然后它不起作用,我想也许Windows操作系统会让它以某种方式出现在顶部。

2 个答案:

答案 0 :(得分:0)

在调用Display()方法后立即尝试使用Inspector类的Activate方法。它通过将检查器窗口置于前台并设置键盘焦点来激活它。

答案 1 :(得分:0)

从Windows Vista开始,Windows不会激活未在前台运行的应用程序窗口;它会闪烁任务栏按钮。

如果您使用的是C ++或Delphi(甚至.Net),您可以使用AttachThreadInput解决这个问题(请参阅how to make the Outlook Compose window top most?),但您无法通过JavaScript进行此操作。

您可以尝试使用Redemption及其SafeInspector。激活方法,但这意味着需要在运行客户端脚本的位置安装Redemption。

var app = new ActiveXObject('Outlook.Application');
var objNS = app.GetNameSpace('MAPI');
var mailItem = app.CreateItem(0);
mailItem.Subject = "test"
mailItem.to = 'test@test.com';
mailItem.display();
mailItem.Attachments.add(emailAttach);
app.ActiveExplorer.Activate();

var sInspector = new ActiveXObject('Redemption.SafeInspector');
var oInspector = mailItem.GetInspector;
sInspector.Item = oInspector;
sInspector.Activate();