我有一个基本的HTML网站(有一些javascript)使用一个简单的锚标签下载文件,如下所示:
<a href="../resources/mexml/MexmlSamples-1.0.zip">Mexml Samples 1.0</a>
Run Code Online (Sandbox Code Playgroud)
为了跟踪下载次数,我有一个onclick处理程序将事件传递给Google Analytics,如下所示:
$('#mybutton').click(function(e){ga('send','event','Download','MexmlSample','MexmlSample-1.0');});
Run Code Online (Sandbox Code Playgroud)
这在使用OS X上的Chrome和Windows 7上的IE下载文件时按预期工作.文件下载,我在GA帐户中看到该事件.
当我在Yosemite上的Safari 8中测试时,该文件会下载,但GA很少看到该事件.当然,我Failed to load resource: Frame load interrupted在Safari错误控制台中遇到了可怕的问题.
我假设我有时会因为Safari中断动作和GA代码触发之间的竞争条件而得到GA事件.
那么在Safari中可以做些什么来解决这个问题,以便我总能得到GA事件?
请注意,我的问题可能与此未解答的问题具有相同的根本原因:下载excel文件时帧加载中断
6月6日更新
我现在彻底困惑了.我刚刚注意到,如果我打开一个新的浏览器页面到我的网站(在Safari中),然后点击下载,那么它会被GA记录下来.然而,随后的点击下载仍然是文件,但不会被GA记录.
如果我关闭该窗口并打开一个新窗口,则GA会再次记录第一次下载.
相比之下,使用Chrome时,GA会记录每次下载.
我现在想我可能正在看错了问题.我看到的行为告诉我Safari正在使用JavaScript保持一个状态,允许第一个GA调用通过,但阻止所有后续调用.
但这与Chrome运行的代码相同,所以我不知道如何开始调试问题.
我目前使用VMware工作站为我工作的各种客户创建单独的工作区.因此,对于给定的客户端,我只安装特定作业所需的软件,而不必担心客户端#1的软件A为客户端#2扫描软件B.
使用足够大小的硬盘驱动器可以很好地工作,但我不确定我是否正在使用VMware.我在设置新工作时所经历的步骤如下:
在做了一段时间之后,我现在有一组VMware图像,它们都处于不同的更新级别,除非我手动进入每个图像并开始更新周期.如果在我的所有图像中都有一些我想要的新工具,我还必须去做多个手动安装.但我知道每个图像都是自包含的(虽然在点击时占用10 + Gb)并且如果单个图像发生任何事情,那么问题就不会传播到任何其他图像中.(请注意,我会对我的所有图像进行定期备份)
所以我的问题是我这样做是最好的方式,还是我应该考虑链接克隆,以便我只需要在我的基础系统上进行Windows更新或常见应用程序安装?每种组织事物的方式有什么样的优点和缺点?
此外,虽然我尽量不将数据文件保存在Image的本地磁盘中,但我发现与映像文件系统相比,本地硬盘驱动器的共享速度似乎非常慢,因此我倾向于将工作留在映像中.我应该强迫自己不要在图像中留下数据吗?或者换句话说,在映像文件系统中的任何单个文件变得无法访问之前,VMware映像可以承受多少损坏?
编辑
发表这个问题后我有些想法
我有一个数据对象用于包含支持INotifyPropertyChanged和我的UI数据IDataErrorInfo.最初我将所有UI控件都显示在一个大型WPF应用程序中,并且很高兴看到通过此自定义样式标记的错误:
<!-- Set error style for textboxes -->
<Style x:Key="txtBoxErrStyle" TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)[0].ErrorContent}" />
</Trigger>
</Style.Triggers>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<DockPanel DockPanel.Dock="Right">
<AdornedElementPlaceholder />
<Image Source="Error.png"
Height="16"
Width="16"
ToolTip="{Binding Path=AdornedElement.ToolTip, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Adorner}}}" />
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
我今天正在重新组织该程序,并决定将各种UI控件分发到几页TabControl.我正在使用的结构布局是:
<tabcontrol>
<tabitem>
<AdornerDecorator>
[.. various Stack Panels, Groups and UI controls moved from original layout ..]
</AdornerDecorator>
</tabItem>
<tabitem>
<AdornerDecorator>
[.. various Stack Panels, …Run Code Online (Sandbox Code Playgroud) 我正在尝试沿着贝塞尔曲线路径移动的UIImageView对象位置的关键帧动画.该图显示了动画之前的初始状态.蓝线是路径 - 最初直线向上移动,浅绿色框是初始边界框或图像,深绿色"鬼"是我正在移动的图像:

当我将rotationMode设置为启动动画时nil,图像将按预期在路径中保持相同的方向.
但是当我将rotationMode设置为启动动画时kCAAnimationRotateAuto,图像会立即逆时针旋转90度并保持此方向一直通过路径.当它到达路径的末尾时,它会以正确的方向重绘(实际上它显示了我在最终位置重新定位的UIImageView)

我天真地期望rotationMode会将图像定向到路径的切线而不是正常,特别是当Apple文档用于CAKeyframeAnimation rotationMode状态时
确定沿路径设置动画的对象是否旋转以匹配路径切线.
那么这里的解决方案是什么?我是否必须将图像顺时针旋转90度?或者有什么我想念的东西?
谢谢你的帮助.
编辑3月2日
我使用仿射旋转在路径动画之前添加了一个旋转步骤,如:
theImage.transform = CGAffineTransformRotate(theImage.transform,90.0*M_PI/180);
Run Code Online (Sandbox Code Playgroud)
然后在路径动画之后,重置旋转:
theImage.transform = CGAffineTransformIdentity;
Run Code Online (Sandbox Code Playgroud)
这使得图像以预期的方式遵循路径.但是我现在遇到了图像闪烁的另一个问题.我已经在寻找这个SO问题中闪烁问题的解决方案:
iOS CAKeyFrameAnimation缩放在动画结束时闪烁
所以现在我不知道我是做了更好还是更坏!
编辑3月12日
虽然Caleb指出是的,但我必须预先旋转我的图像,Rob提供了一个很棒的代码包,几乎完全解决了我的问题.Rob没有做的唯一事情是补偿我的资产是用垂直方向而不是水平方向绘制的,因此在做动画之前还需要将它们预先旋转90度.但是,嘿,唯一公平的是我必须做一些工作才能让事情顺利进行.
所以我对Rob的解决方案的轻微修改是为了满足我的要求:
当我添加UIView时,我预先旋转它以通过设置rotationMode:来抵消添加的固有旋转:
theImage.transform = CGAffineTransformMakeRotation(90*M_PI/180.0);
我需要在动画结束时保持旋转,所以不是在定义完成块之后用新的比例因子对视图的变换进行爆破,而是根据当前变换构建比例:
theImage.transform = CGAffineTransformScale(theImage.transform,scaleFactor,scaleFactor);
而这就是我必须做的就是让我的形象像我预期的那样沿着这条路走!
编辑3月22日
我刚刚向GitHub上传了一个演示项目,该项目展示了沿着bezier路径移动对象的过程.代码可以在PathMove找到
我还在我的博客中写了一篇关于在iOS中沿着bezier路径移动对象的文章
我一直在疯狂地将组合框绑定到类的枚举类型属性,其中枚举本身在同一个类中声明.
我试图按照这里提供的答案(wpf组合框绑定到枚举我做错了什么?)具体我使用建议的MarkupExtension代码和匹配的xaml代码.
我的工作代码是:
在单独的文件中定义枚举.
namespace EnumTest
{
public enum TestEnum {one, two, three, four };
}
Run Code Online (Sandbox Code Playgroud)
使用Enum的类(请注意,已删除propertyChanged代码以简化操作):
namespace EnumTest
{
public class Test : INotifyPropertyChanged
{
private TestEnum _MyVar;
public TestEnum MyVar {
get { return _MyVar; }
set
{
_MyVar = value;
OnPropertyChanged("MyVar");
}
}
public Test()
{
_MyVar = TestEnum.three;
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用该类的程序文件:
namespace EnumTest
{
public partial class Window1 : Window
{
Test _oTest = new Test();
public Window1()
{
InitializeComponent();
cmbBox.DataContext = _oTest; …Run Code Online (Sandbox Code Playgroud) 我正在通过构建一些供我自己使用的实用程序网站来慢慢建立我的Zend技能.我一直在使用Zend Forms和Form验证,到目前为止我一直很高兴我已经理解了Zend的做事方式.但是我对如何在编辑表单的上下文中使用Zend_Validate_Db_NoRecordExists()以及映射到必须唯一的数据库列的字段感到困惑.
例如,使用这个简单的表
TABLE Test
(
ID INT AUTO_INCREMENT,
Data INT UNIQUE
);
Run Code Online (Sandbox Code Playgroud)
如果我只是在Table Test中添加一个新行,我可以在Data字段的Zend Form元素中添加一个验证器:
$data = new Zend_Form_Element_Text('Data');
$data->addValidator( new Zend_Validate_Db_NoRecordExists('Test', 'Data') )
Run Code Online (Sandbox Code Playgroud)
在表单验证时,此验证程序将检查表中是否已存在Data元素的内容.因此,插入Test可以继续而不违反数据字段UNIQUE限定符.
但是,编辑Test表的现有行时情况会有所不同.在这种情况下,验证器需要检查元素值是否满足两个互斥条件条件之一:
用户已更改元素值,表中当前不存在新值.
用户未更改元素值.因此,该值不当前存在的表(这是确定).
在Zend的验证文档谈论加入一个参数到NoRecordExists()验证从验证过程不包括记录的目的.想法是"验证表格以查找任何匹配的行,但忽略a字段具有此特定值的任何命中".这样的用例是在编辑表时验证元素所需的用例.在1.9中执行此操作的伪代码就是这样(实际上我从1.9源代码中得到了这个 - 我认为当前的文档可能是错误的):
$data = new Zend_Form_Element_Text('Data');
$data->addValidator( new Zend_Validate_Db_NoRecordExists('Test', 'Data',
array ('field'=>'Data', 'Value'=> $Value) );
Run Code Online (Sandbox Code Playgroud)
问题是要被排除的值($ Value)在实例化时被绑定到验证器(也就是在实例化表单时).但是当表单正在编辑记录时,当表单最初填充数据时,该值需要绑定到$ data字段的内容 - IE最初从Test表行读取Data值.但是在典型的Zend模式中,表单被实例化并在两个单独的步骤中填充,这排除了将排除值绑定到期望的元素值.
下面的Zend伪代码标记了我想要将$ Value绑定到NoRecordExists()验证器的位置(并注意这是一个常见的Zend控制器模式):
$form = new Form()
if (is Post) {
$formData = GetPostData()
if ($form->isValid($formData)) {
Update Table with $formData
Redirect out of here …Run Code Online (Sandbox Code Playgroud) 好吧,虽然我从未想过在2012年我会编写我的第一个ActiveX控件(是的,这是有充分理由的)我正在努力让它在Windows 7(x64)下运行.
解决方案简短的故事: 我从一些我的regasm调用中丢失了/ codebase,并且混合了32位和64位进程,但标准的VS2010命令提示符混合使用regasm和cscript的32位和64位路径没有帮助.
长篇故事如下:
我一直在弹跳
(哎呀 我有错误的链接..虽然看起来我最初提供的链接是有人复制原始博客页面)
和
我似乎正在成功构建项目(对于后者,我必须将资源编译器位置更改为正确的位置).
对于我使用建议的安装程序的第一个项目,对于第二个项目,我试图直接使用regasm.
但在此之后,一切都在下山.我尝试注册所有的但是:
我的测试用例是一个包含的简单JScript文件
var x = new ActiveXObject( "name of object" );
Run Code Online (Sandbox Code Playgroud)
哪个失败了,错误:
test.js(1,1)Microsoft JScript运行时错误:Automation Server无法创建对象
我不确定这是一个权限问题,还是32对64位问题或组合.
许多提供ActiveX帮助的网站假设您将通过网页访问它,所以我尝试查看IE权限(即使我想将控件加载到第三方程序中).
我知道如果我使用'framework'或'framework64'版本的regasm我可以控制注册表项中的位置 - 我已经看到一些引用运行cscript作为32或64位(这可能影响到哪个部分搜索注册表)取决于调用的cmd shell(我尝试了两种方式,以及尝试"管理员"shell).
所以基本上在这一点上我不知道我在做什么或者我应该做什么.
我的目标是在Windows 7 x64上注册ActiveX控件,并使其能够通过以下方式加载:
笔记
对于使用安装程序的项目(使用C#在.Net中创建ActiveX控件),它将代码安装到"c:\ program Files(x86)\"中,并使用regedit查找"Computer\HKEY_CLASSES_ROOT\Wow6432Node"下的条目CLSID \"我相信它告诉我DLL已经安装为32位进程.我尝试从32位和64位cmd运行我的cscript测试,但它们都失败了.请注意,安装程序在运行时会创建等效的"regasm/codebase".
对于我尝试使用regasm进行注册的项目(C#ActiveX控件(CSActiveX)),它有一些用于注册ActiveX COM控件的附加代码.此代码提到注册32位进程内服务器(请参阅ActiveXCtrlHelpers.cs)
(顺便说一下,我现在也在Safari/Lion中诅咒自动纠正,不断将小写"DLL"改为"全部")
编辑2012-08-07
艺术家的回答提示我发现:
从标准的VS2010命令提示符
通过标准VS2010命令提示符运行'regasm/codebase'时(以及管理员允许regasm执行更改),条目被转储到HKEY_CLASSES_ROOT\Wow6432Node\CLSID下的注册表中,并且测试脚本在同一提示符下失败.
但是,我可以在Excel 2007(32位)中看到ActiveX控件
从x64 Win64 VS2010命令提示符
在VS2010 x64 Win64命令提示符下运行时(再次作为管理员),注册表项出现在HKEY_CLASSES_ROOT\CLSID下,但这次测试脚本在同一提示下运行,也来自标准Windows cmd提示符(但是它们在32位提示符下失败) )
但!!我无法从Excel 2007(32位)看到活动的X控件
现在我只需要弄清楚*nix'哪个'命令的窗口相当于确保我使用哪个regasm''where '命令
查看VS2010和Windows 7命令提示符:
VS2010 (standard prompt): …Run Code Online (Sandbox Code Playgroud) 好吧,我的问题类似于如何从私人工作组队列接收消息(我基本上使用相同的代码).
我正在使用主机上创建队列
MessageQueue.Create(@".\Private$\MyNewPrivateQueue");
Run Code Online (Sandbox Code Playgroud)
使用打开远程计算机上的队列
var queue = new MessageQueue(@"FormatName:DIRECT=TCP:xxx.xxx.xxx.xxx\PRIVATE$\MyNewPrivateQueue");
Run Code Online (Sandbox Code Playgroud)
使用queue.send()和queue.Receive()编写/读取数据
我有两个系统,我正在尝试.
当我在W7系统上创建专用队列并尝试编写然后从XP系统读取队列时(根据引用的问题),它在读取操作上失败并显示"消息队列服务不可用"异常.
然而,当我扭转系统(创建XP系统上的队列和写入/从W7系统中读取,并使用相同的代码),它工作正常.
我经历过:
我也尝试关闭W7和XP防火墙,并给予每个人和他的狗对队列本身的完全权限无济于事.
鉴于它可以作为队列主机使用XP,但不能使用W7作为主机,我认为这是一个安全问题,而不是代码问题.但是对于我的生活,我无法看到W7在哪里堵塞.
编辑8/9
好的..添加
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters\Security\AllowNonauthenticatedRPC
Run Code Online (Sandbox Code Playgroud)
允许我从远程专用队列中读取消息.然而,这似乎不允许使用
GetPrivateQueueByMachine(String machineName)
Run Code Online (Sandbox Code Playgroud)
枚举可用的私有队列.那么这个想法有什么意义吗?
我正在尝试获取LAN网络上所有IP的列表.原因是我正在编写一个使用STAR TSP100LAN收据打印机的应用程序.
获得打印机IP地址的过程对最终用户来说非常麻烦.它涉及关闭打印机,按住进纸按钮,重新打开打印机,等待15秒钟,让打印机通过DHCP获取IP地址,然后最终吐出带有此信息的收据.
看到打印机未启用Bonjour,是否可以通过其他方法获取IP地址?
任何帮助深表感谢!我希望这不是一个重复的问题,但通过我的搜索我似乎无法找到解决方案!
更新:好的经过一番思考后,我想出了一个伪解决方案:
通过NSHost确定iPad的当前IPAddress.
从IPAddress中剥离最后一个象限
使用剥离的字符串作为前缀,对最后一个象限迭代1-255
到目前为止,这一直在工作,我为每个端口打开尝试设置了5毫秒的超时.但是已经发现这可以返回一些空结果,尽管网络上实际上有一台分配了IP地址的打印机.
也许如果我得到一个null结果,我第一次将超时增加到15 milleseconds再次尝试搜索.
我是第一次尝试Netbeans,以便进行一些Linux C/C++开发工作.但是在拥有强大的Visual Studio背景时,我很难找到相当于VS的东西solution file.
解决方案是一组一个或多个项目的组合,这些项目一起工作以创建应用程序.
我能看到的最接近的是一个Project Group定义为:
组是IDE项目的持久集合.持久性位于用户目录中,因此是每用户(不与其他IDE用户共享).组具有显示名称.如果其中一个项目被设置为主项目,那么该信息也会保留.
这使得这似乎成为组织我目前正在进行的工作的工具,而不是组织项目之间关系的手段(并且与项目本身一起存储)
那么ProjectsNetbeans相当于VS solution files吗?
c# ×2
ios ×2
wpf ×2
activex ×1
class ×1
combobox ×1
dll ×1
enums ×1
javascript ×1
msmq ×1
nested ×1
netbeans ×1
objective-c ×1
osx-yosemite ×1
php ×1
rotation ×1
safari ×1
solution ×1
styles ×1
tabcontrol ×1
tabs ×1
vmware ×1
windows-7 ×1
windows-xp ×1
zend-db ×1