gpt4 book ai didi

javascript - 通过网页上的 Javascript Mailto 代码触发时,Outlook 检查器窗口不会始终自动关闭

转载 作者:行者123 更新时间:2023-12-03 06:46:40 25 4
gpt4 key购买 nike

我正在尝试自动关闭 Outlook 检查器窗口,该窗口在单击链接有 Javascript mailto: 调用(已注入(inject))的按钮后自动打开。我以为我使用了正确的 Outlook 事件,但也许不是。我当前正在做的是订阅 Inspectors_NewInspectorInspector_Activate 事件,以便检测窗口何时打开/变得可见,然后我尝试从内部关闭它Inspector_Activate 事件。我需要电子邮件的唯一原因是为了触发其他 VBA 代码在单击 Web 浏览器中的特定按钮时执行,以及阅读电子邮件的主题。由于似乎没有直接的方法可以通过 Javascript 控制 Outlook,而无需使用 Internet Explorer(我使用的是 Chrome)或 Microsoft Office API,因此我得出的结论是,这是最好的方法我去吧。

我当前的问题:

我可以从新的电子邮件/检查器窗口读取数据,但无法始终使窗口自动关闭。它只会间歇性地自动关闭。其他时候,我会看到卡住的检查器窗口,只能通过单击窗口的红色 X 来关闭。窗口中甚至没有其他内容可点击。

Inspector Window

我尝试过的:

我尝试在整个代码的不同位置发出关闭窗口的调用;有些人犯了错误,有些人什么也没做。我在整个代码的不同位置尝试了 putt DoEvents 循环;所有这些都在等待不同的东西加载,但它们要么没有效果,要么陷入无限循环。我什至无法告诉你有多少次我在尝试解决此问题时导致 Outlook 崩溃。更重要的是,在尝试调试问题时,我收到的成功案例和不成功案例的读数相同。下面的第一部分是成功执行,其中代码自动关闭窗口,第二部分是代码完成后窗口仍然打开。

立即窗口中的输出:

m_Inspectors_NewInspector Event: 1
Beginning m_Inspectors_Activate Event: 1
Closing
Should be closed
End m_Inspectors_Activate Event: 0
------------------------------------------------------
m_Inspectors_NewInspector Event: 1
Beginning m_Inspectors_Activate Event: 1
Closing
Should be closed
End m_Inspectors_Activate Event: 0
------------------------------------------------------

我目前拥有的:

下面是我在 ThisOutlookSession 中的代码:

Private WithEvents m_Inspectors As Inspectors
Private WithEvents m_Inspector As Inspector
Private WithEvents Mail As MailItem

Public Sub Initialize_handler()
Set m_Inspectors = Application.Inspectors
End Sub

Private Sub m_Inspectors_NewInspector(ByVal Inspector As Inspector)
If TypeOf Inspector.CurrentItem Is Outlook.MailItem Then
'Handle emails only
Set m_Inspector = Inspector
Debug.Print "m_Inspectors_NewInspector Event: " & m_Inspectors.Count
End If
End Sub

Private Sub m_Inspector_Activate()
Debug.Print "Beginning m_Inspectors_Activate Event: " & m_Inspectors.Count
Dim Mail As Object
DoEvents
Set Mail = m_Inspector.CurrentItem
If Mail Is Nothing Then Debug.Print "Mail is Nothing": Exit Sub

If Mail.To = "velo@automated.com" Then
Dim clipB As String, DataObj As MsForms.DataObject
Select Case Mail.Subject
Case "Import", "Export"
Set DataObj = New MsForms.DataObject
DataObj.GetFromClipboard
clipB = DataObj.GetText(1)
'MsgBox (IIf(Mail.Subject = "Import", "Import for ", "Export for ") & clipB)
Mail.Close olDiscard
Set Mail = Nothing
'Set m_Inspector = Nothing
Case Else
MsgBox ("Hmm")
Exit Sub
End Select
End If
Debug.Print "End m_Inspectors_Activate Event: " & m_Inspectors.Count
Debug.Print "------------------------------------------------------"
Set m_Inspector = Nothing
End Sub

Private Sub Mail_Close(Cancel As Boolean)
Cancel = False
End Sub

Private Sub m_Inspector_Close()
'MsgBox ("Close!")
Debug.Print "Closing"
'Set m_Inspector = Nothing
Debug.Print "Should be closed"
End Sub

为了完整起见,以下是我注入(inject)的 Javascript 代码的相关部分:

$(document).on('click', 'button.btn-large:nth-child(3)', function(){
var fullsupplier;
fullsupplier = document.getElementById("asinum").innerHTML + " " + document.getElementById("supplierName").innerHTML;
//alert(fullsupplier);
copyTextToClipboard(fullsupplier);
window.location.href = "mailto:velo@automated.com?subject=Import";
});

$(document).on('click', 'button.btn-large:nth-child(1)', function(){
var fullsupplier;
fullsupplier = document.getElementById("asinum").innerHTML + " " + document.getElementById("supplierName").innerHTML;
//alert(fullsupplier);
copyTextToClipboard(fullsupplier);
window.location.href = "mailto:velo@automated.com?subject=Export";
});

我的问题:

我做错了什么?如何使检查器窗口始终自动关闭而不是间歇性关闭?

最佳答案

问题是从外部进程(例如mailto:链接、从Word 发送等)创建的电子邮件不会触发NewInspector 事件。您必须使用计时器来检测 Inspectors.Count 何时发生变化,并在新添加的 Inspector 中设置一个 Hook 。然后你就可以捕获它的事件。

关于javascript - 通过网页上的 Javascript Mailto 代码触发时,Outlook 检查器窗口不会始终自动关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37707663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com