我有一个VBScript,可以在Internet Explorer窗口中创建用户表单。此窗口是使用CreateObject(InternetExplorer.Application)创建的。问题是,如果用户通过x'ing关闭此窗口,窗口将关闭,但脚本将抛出错误。我想避免收到此错误。关于错误,我不能更具体,因为它几乎每次都有所不同。我的脚本中有一个循环,错误似乎指向我的脚本在用户通过x'ing out关闭程序时执行的循环中的任何行。
我知道一种方法是使用wscript.CreateObject(InternetExplorer.Application,“IE_”),然后使用:
Sub IE_onQuit
wscript.quit
End Sub
不幸的是,这对我来说不起作用,因为我需要运行此代码的设备所使用的解释器无法识别wscript对象。如果重要的话,我的代码是通过Tecan的EVOware执行的,运行在带有IE 11的Windows 7机器上.EVOware似乎与自己的解释器捆绑在一起,并没有使用Windows操作系统内置的解释器。没有关于EVOware的VBscript解释器的文档似乎存在,至少没有我能找到的。但是,如果不使用上面描述的IE_onQuit方法,我的代码将在使用Windows解释器直接通过vbs文件执行时抛出相同的错误,因此错误不是EVOware特有的;这只是因为EVOware而无法使用任何wscript解决方案。
我也尝试使用On Error Resume Next,但这也行不通,因为这会导致我的脚本被无限循环捕获并且永远不会关闭,除非我在任务管理器中终止进程。
有没有办法实现我的目标(即允许用户x-out窗口而不抛出错误)而不使用wscript?或者,禁用x-out按钮也是一种可接受的解决方案;但是,通过使IE窗口全屏隐藏这些按钮不是。
以下是我的代码示例:
sHTMLCode = some html code
Set IE = CreateObject("InternetExplorer.Application")
With IE
.ToolBar = False
.StatusBar = False
.Resizable = False
.Height = 500
.Width = 400
.Left = 600
.Top = 200
.Visible = True
CreateObject("WScript.Shell").AppActivate "Internet Explorer"
.Navigate "about:blank"
While .ReadyState <> READYSTATE_COMPLETE
Sleep 0.01
Wend
.document.title = "Title"
.document.body.style.backgroundcolor = "lightgrey"
.document.body.innerHTML = "<center>" & sHTMLCode & "</center>"
Do Until Protocol_Type <> "" And Number_of_Plates <> "" And Dye_Source <> ""
If .document.all.done.value = "clicked" Then
.document.all.done.value = False
.
.
.
stuff
.
.
.
Protocol_Type = sProtocol_Type
Evoware.SetStringVariable "Protocol_Type",Protocol_Type
Number_of_Plates = sNumber_of_Plates
Evoware.SetDoubleVariable "Number_of_Plates",Number_of_Plates
Dye_Source = sDye_Source
Evoware.SetStringVariable "Dye_Source",Dye_Source
Else MsgBox "Please re-enter your protocol parameters.", vbInformation
End If
End If
Loop
.document.all.done.value = True
.Quit
End With
答案 0 :(得分:1)
这可行吗?
//New Price
add_action( 'woocommerce_product_options_pricing' ,'custom_unit_price' );
function custom_unit_price() {
woocommerce_wp_text_input( array(
'id' => '_unit_price',
'class' => 'wc_input_price short',
'label' => __( 'Unit Price', 'woocommerce' ) . ' ('.get_woocommerce_currency_symbol().')',
'type' => 'number',
'desc_tip' => 'true',
'description' => __( 'Enter the unit price if you want to show this price type.', 'woocommerce' ),
'custom_attributes' => array(
'step' => 'any',
'min' => '0'
)
));
}
add_action('woocommerce_process_product_meta_simple', 'save_custom_unit_price');
function save_custom_unit_price($post_id) {
global $wpdb, $woocommerce, $woocommerce_errors;
update_post_meta( $post_id, '_unit_price', stripslashes( $_POST['_unit_price'] ) );
}
// Text Field for unit measurement
add_action('woocommerce_product_options_pricing','custom_unit_measurement');
function custom_unit_measurement() {
woocommerce_wp_text_input ( array(
'id' => '_unit_measurement',
'label' => __( 'Unit Measurement', 'woocommerce' ),
'placeholder' => 'i.e: pro Stück',
'desc_tip' => 'true',
'description' => __( 'Enter the unit measurement in your language. If you want to show price per unit, this field must be filled', 'woocommerce' )
));
}
add_action('woocommerce_process_product_meta_simple', 'save_custom_unit_measurement');
function save_custom_unit_measurement($post_id) {
global $wpdb, $woocommerce, $woocommerce_errors;
update_post_meta( $post_id, '_unit_measurement', stripslashes( $_POST['_unit_measurement'] ) );
}
// only copy the opening php tag if needed
// Change the shop / product prices if a _unit_price is set
add_filter( 'woocommerce_get_price_html', 'sv_change_product_html', 10, 2 );
function sv_change_product_html( $price_html, $product ) {
$_unit_price = get_post_meta( $product->id, '_unit_price', true );
if ( ! empty( $_unit_price ) ) {
$_unit_measurement = get_post_meta( $product->id, '_unit_measurement', true );
// Here you just concatenate the $_unit_measurement variable (in for example another span tag) after the price
$price_html = '<span class="amount">' . wc_price( $_unit_price ). ' </span>';
$price_html .= '<span class="mesurement">' . $_unit_measurement . ' </span><br />';
}
// return the formated price with the formated unit mesurement
return $price_html;
}
答案 1 :(得分:0)
您可以在脚本的开头尝试:
On Error Resume Next
然后在Quit语句后捕获错误代码,并忽略导致它的错误代码。 无论如何,错误是什么?