我相信我需要调用javascript方法而不是尝试触发按钮.我尝试了以下示例,我认为我的问题是我不知道应该使用哪些代码部分.. 单击按钮或使用VBA和http://www.vbaexpress.com/forum/ 执行JavaScript功能showthread.php?9690-Solved-call-a-javascript-function and http://www.vbforums.com/showthread.php?650771-RESOLVED-How-to-Call-a-JavaScript-function-From-Visual-基本-6-WITH-想参数
我无法发布链接,因为它需要登录才能访问它...如果您需要更大的代码示例以便了解我的问题,请告诉我.
我相信我需要一个引用"导出为CSV"的函数,但我不确定要调用哪个函数以及要在调用中包含哪些函数...以下是来自catalog.js
function()
{var a=window.Ext4||window.Ext;a.define ("Rally.alm.ui.page.plugins.PageToolFactory",{singleton:true,mixins: {messageable:Rally.Messageable},PRINT:"PRINT",IMPORT:"IMPORT",EXPORT:"EXPORT",ge t:function(c,b)
{var d=[];
if(this._shouldHaveRowAction(this.PRINT,c))
{
if(b.getPlugin("printplugin"))
{
d.push({text:"Print...",handler:b.getPlugin("printplugin").print,cls:"page- tools",scope:b.getPlugin("printplugin"),addInteractionClass:true})}}
if(this._shouldHaveRowAction(this.IMPORT,c))
{
if(b.getPlugin("printplugin"))
{
d.push({text:"Import User Stories...",handler:a.emptyFn})}}
if(this._shouldHaveRowAction(this.EXPORT,c))
{
if(b.getPlugin("printplugin"))
{
d.push({text:"Export as CSV",handler:a.emptyFn})}} return d}
Run Code Online (Sandbox Code Playgroud)
下一个样本来自yui.js ...
(function()
{
RALLY.ui.menu.AvailablePageTools=Ext.extend(Object, {constructor:function()
{
this.PRINT={text:'Print...',slug:'print'};
this.EMAIL={text:'Email...',slug:'email'};
this.SAVE={text:'Save...',slug:'save'};
this.CSV_IMPORT={text:'Import User Stories...',slug:'csvimport'};
this.CSV_IMPORT_PORTFOLIO_ITEM={text:'Import Portfolio Items...',slug:'csvimport'};
this.CSV_EXPORT={text:'Export as CSV',slug:'csvexport'};
this.PDF_EXPORT={text:'Export as PDF',slug:'pdfexport'};
Run Code Online (Sandbox Code Playgroud)
我在我的vba脚本中尝试了这些选项..
Dim objIE As SHDocVw.InternetExplorer 'microsoft internet controls (shdocvw.dll)
Dim htmlDoc As MSHTML.HTMLDocument 'Microsoft HTML Object Library
Dim htmlInput As MSHTML.HTMLInputElement
Dim htmlColl As MSHTML.IHTMLElementCollection
Dim CurrentWindow As HTMLWindowProxy
'Set objIE = Nothing
Set objIE = New SHDocVw.InternetExplorer
ThisWorkbook.Worksheets("Sheet1").Activate
With objIE
.navigate "website"
.Visible = 1
Do While .readyState <> 4: DoEvents: Loop
Application.Wait (Now + TimeValue("0:00:02"))
Set htmlDoc = .document
objIE.document.all.Item
'Set CurrentWindow = objIE.htmlDoc.parentWindow
'no error no export
'Call objIE.document.parentWindow.execScript("_exportHandler:Function()", "JavaScript")
'no error no export
'Call objIE.document.parentWindow.execScript("_getExportItems:Function()", "JavaScript")
'RUN TIME ERROR could not complete the operation due to error 80020101 (error while evaluating js)
'Call objIE.document.parentWindow.execScript("_a.define()", "JavaScript")
'run time error the object invoked has disconnected from its clients,
'RUN TIME ERROR could not complete the operation due to error 80020101 (error while evaluating js)
'Call objIE.document.parentWindow.execScript("_b.push()", "JavaScript")
'run time error the object invoked has disconnected from its clients,
'RUN TIME ERROR could not complete the operation due to error 80020101 (error while evaluating js)
'Call objIE.document.parentWindow.execScript("handler:function(){window.location=Rally.ui.grid.GridExport.buildCsvExportUrl(this.gridboard.getGridOrBoard())}", "JavaScript")
'Call objIE.document.parentWindow.execScript("b.push()", "JavaScript")
'Call objIE.document.parentWindow.execScript("c.push()", "JavaScript")
'RUN TIME ERROR could not complete the operation due to error 80020101 (error while evaluating js)
'Call objIE.document.parentWindow.execScript("this.CSV_Export()", "JavaScript")
'error the remote server machine does not exist or is unavailable
'Call objIE.document.parentWindow.execScript("constructor:function()", "JavaScript")
'Call objIE.document.parentWindow.execScript("constructor:function()", "JavaScript")
'object
Call CurrentWindow.execScript("d.push({text:CHR(34)Export as CSV CHR(34),handler:a.emptyFn})")
'ofile.SaveAs scrapeRally:=ofile.Name
'ofile.Close savechanges:=False
'objIE.Quit
Set objIE = Nothing
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
我试图从VBA运行这个,所以我不能使用var ...
Dim getFunction = "get:function (_shouldhaverowaction(this.export,C)),(b.getPlugin(chr(34)printplugin chr(34)))"
Dim exportNow
eval ("exportNow = new" + getFunction + ";")
Run Code Online (Sandbox Code Playgroud)
我也尝试过
Call objIE.HTMLDocument.eval("get:function (_shouldhaverowaction(this.export,C)),(b.getPlugin( chr(34) printplugin chr(34)))", "JavaScript")
Run Code Online (Sandbox Code Playgroud)
当我尝试运行它时,我得到"该对象不支持此属性或方法"错误.
任何建议都会很棒.
我刚刚遇到了另一个可能是我想要的功能,但我仍然不知道应该使用哪一部分来调用它.我试着只调用_getExportItems:function()但是由于错误80020101(评估js时出错)我得到RUN TIME ERROR无法完成操作
_getExportItems:function(){
var b=[];
if(this.enableCsvExport){
b.push({
text:"Export to CSV...",
handler:function(){
window.location=Rally.ui.grid.GridExport.buildCsvExportUrl (this.gridboard.getGridOrBoard())},scope:this})}
Run Code Online (Sandbox Code Playgroud)
这是使用execScript
对象方法的简单示例window
。myFunc
它调用名为和 的全局函数myFuncWithParams
。代码已使用 IE 11 进行测试。
Option Explicit
Private Const Url As String = "c:\Temp\evalExample.html"
Public Sub Test()
Dim objIE As SHDocVw.InternetExplorer
Dim currentWindow As HTMLWindowProxy
Set objIE = New SHDocVw.InternetExplorer
objIE.navigate Url
objIE.Visible = 1
Do While objIE.readyState <> 4
DoEvents
Loop
Set currentWindow = objIE.document.parentWindow
' Here the function without parameters is called.
currentWindow.execScript code:="myFunc()"
' Here the function with parameters is called.
' First parameter is numeric, then string, then boolean and finally object.
' The object has three properties, numeric, string and array.
currentWindow.execScript code:="myFuncWithParams(123, 'Some text', true, { property1: 555, property2: 'hi there from object', property3: [111,222,333] })"
' And here function which receives parameters and returns value.
' The return value is then available through hidden property of document named 'Script'.
' Thanks to this answer: /sf/ask/630414011/
currentWindow.execScript code:="func = function(){return myFuncReturns(2,3);}; retVal = func();"
Dim result As Long
result = objIE.document.Script.retVal
Debug.Print result ' for 2 and 3 prints 5
objIE.Quit
Set objIE = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)
evalExample.html
<!-- saved from url=(0016)http://localhost -->
<html>
<head>
<script type="text/javascript">
function myFunc() {
var date = new Date();
alert("Hi from my parameter-less 'myFunc'. Day of the month: " + date.getDate());
}
function myFuncWithParams(a, b, c, d) {
var number = a + 100,
text = b + " from my func2",
bool = !c,
obj = d;
var alertText = "\nNumber = '" + number + "'" +
"\nText = '" + text + "'" +
"\nBoolean = '" + bool + "'" +
"\nObject.property1 = '" + obj.property1 + "'" +
"\nObject.property2 = '" + obj.property2 + "'" +
"\nObject.property3.lenght = '" + obj.property3.length + "'" +
"\nObject.property3[2] = '" + obj.property3[2] + "'";
alert("Hi from my 'myFunc2' with parameters.\n" + alertText);
}
function myFuncReturns(a, b) {
return a + b;
}
</script>
</head>
<body>
<div>eval test</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12485 次 |
最近记录: |