我目前正在开发一个Web应用程序,我有一个JS日志记录机制,处理未被页面内的js代码捕获的Javascript错误.我使用window.onerror来捕获所有这些错误并将其他地方记录在哪里.
但问题是Opera没有window.onerror事件.我能想到的一种方法是,对所有js函数进行字符串处理,然后在body加载后在这些函数中插入try catch块.但它在许多情况下不起作用,但是,它至少在某种程度上起作用.
我确信这种方法很糟糕,但是,我想不出更好的方法.请指教.
更新:现在,我正在调用下面的代码尽可能多地捕获错误.
function OnBodyLoad()
{
var allElements = document.getElementsByTagName("*");
for(var cnt = 0;cnt < allElements.length;cnt++)
{
RegisterAllEvents(allElements[cnt]);
}
}
function RegisterAllEvents(objToProcess){
for(var cnt = 0;cnt < objToProcess.attributes.length;cnt++){
if(IsAttributeAnEvent(objToProcess.attributes[cnt].name))
{
objToProcess.attributes[cnt].value = 'try{'+objToProcess.attributes[cnt].value+'}catch(err){LogError("'+ objToProcess.id+'"'+ ',err);}';
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个需要或多或少像素完美的HTML页面,我注意到在Opera 10中,字体比其他浏览器渲染得更大,即使字体大小实际上是相同的.
请参阅Opera 10中的此示例页面以及Firefox 3.6等其他浏览器:
http://troy.onespot.com/static/stack_overflow/opera_font_size.html
或者,这是一个说明问题的屏幕截图:
http://skitch.com/troywarr/d47m1/font-size
"50px"和"46px"文本背后的红色框(两者都具有相应的字体大小)都具有50px的高度.
在Firefox 3.6中,"50px"中"p"的下行与其后面的红色框的底部对齐.在Opera中,"50px"中"p"的下降位于下方; 它是"46px",更接近Firefox中的"50px".这告诉我,Opera在10%的范围内渲染字体太大了.
这与其他正文的问题完全相同,在Opera 10中完全抛弃了我的页面布局.如果您对可能导致此问题的原因有任何想法,或者至少如何预防/修复它,请告诉我.
谢谢!
更新:
似乎我没有安装Helvetica的正确副本 - 我从字体堆栈中删除了它,并且在我的测试页面上看到的渲染文本没有区别.
我更新了测试页面只使用通用的"sans-serif"字体系列,所以希望我们现在都看到同样的事情.
有趣的是,使用通用的"serif"字体在Opera和Firefox中显示完全相同.
这个问题可能只是一个关于Opera如何显示通用"sans-serif"字体的怪癖?
更新2:
这可能很重要:我使用的是Mac OS X Snow Leopard.我现在正在尝试其他字体,看看我是否可以进一步隔离这个问题.
更新3:
我使用Arial创建了另一个测试页面:
http://troy.onespot.com/static/stack_overflow/opera_font_size_reset_arial.html
现在Opera和Firefox几乎完全匹配!
在这个项目中,我可能会使用Arial代替Helvetica.据我所知,我有一个完整的OS X版本的Helvetica - 所以我不能在不同的用户看到我的页面上的字体之间有任何差异.我会坚持使用久经考验的Arial.
但是,这意味着什么呢?OS X的默认sans-serif字体只是在Opera中呈现奇怪的东西?
在此站点的搜索框内单击,您将看到我的意思.有没有办法删除它?另外,如果我决定保留它,我该如何改变它的尺寸?
谢谢,克里斯
我有以下jQuery适用于除 Opera 之外的所有主流浏览器:
jQuery(document).ready(function () {
jQuery("#GetResults").live("click", function(e){
e.preventDefault(); //Opera doesn't execute anything here
});
};
Run Code Online (Sandbox Code Playgroud)
单击以下链接时应该触发:
<a id="GetResults" href="Folder/File/javascript:void(0);">Get Results</a>
Run Code Online (Sandbox Code Playgroud)
只有Opera忽略了这个.有任何想法吗?
编辑:
我刚刚发现如果我用.bind()代替.live(),一切都按预期运行.我找不到任何与Opera中的.live()错误相关的文档,它确实在jsFiddle 中工作,它指向环境的东西.可能导致这种行为的原因是什么?
给出以下HTML:
<div contenteditable="true">Some text</div>
Run Code Online (Sandbox Code Playgroud)
还有一些用JQuery检测click事件的JS:
$("div").click(function() {
alert('click!');
});
Run Code Online (Sandbox Code Playgroud)
如果您选择div中文本的一部分,Opera 将不会抛出click事件(在Linux上使用Opera 11.61和在Windows上使用11.62进行测试).双击一个单词以对其进行部分标记确实有效.
本次活动是在IE7-9,火狐,Chrome和Safari抛出.这里有一个稍微修改过的JSFiddle.
这是预期的行为,JQuery错误,Opera错误还是其他什么?
我注意到它min-height在Opera中不起作用.我正在尝试这样的事情:
<div class="content"><div>
<div class="content newstyle"><div>
Run Code Online (Sandbox Code Playgroud)
我的CSS代码是:
.content {
min-height: 600px;
}
.newstyle {
min-height: auto;
}
Run Code Online (Sandbox Code Playgroud)
歌剧就像min-height不存在一样.
如果我应用任何其他风格.newstyle,如背景或其他,那么它运作良好.但min-height: auto似乎没有工作......
任何的想法?
我正在尝试远程调试Opera for Android.我已经安装了Android SDK,在手机上检查了远程调试,在我的电脑上安装了Chrome,Android 4.3,并且已经成功地能够在Chrome和Firefox中进行远程调试.我按照Android远程调试Opera的说明进行操作,它说:
将桌面连接到设备
启动Opera for Android,并通过在地址栏中输入opera:debug并选中结果页面中的"启用"复选框来启用调试,如下所示.
当我输入地址时,我没有得到结果复选框,但只有消息"此网页不可用Chrome页面上的网页://调试/可能暂时关闭......等..."地址栏显示: opera://debug/
我有最新版本的Opera(35).有任何想法吗?
我似乎无法摆脱浏览器中select元素的边框(轮廓,框阴影?)Opera.
以下规则均未删除边框:
select {
/*border: 0;*/
border: none;
outline: 0;
background: transparent;
border-image: none;
outline-offset: -2px;
border-color: transparent;
outline-color: transparent;
box-shadow: none;
}Run Code Online (Sandbox Code Playgroud)
<select class="form-control">
<option selected="selected" value="0">Most Popular</option>
<option value="1">A-Z</option>
<option value="2">Z-A</option>
<option value="3">Lowest price</option>
<option value="4">Highest price</option>
</select>Run Code Online (Sandbox Code Playgroud)
Opera 版本是46.0.2597.57(PGO).
以上代码在其他测试的浏览器中运行良好 - Chrome,Firefox,Internet Explorer和Edge.
任何提示都会有所帮助.
编辑我使用的是Windows 10 64位,这是一个截图:
我有一个表单,我必须注意用户在退出页面上有alert(),而表格中有数据尚未发送.
我读过歌剧有很多问题.Opera 11也就是说,因为我只需考虑最后一个版本.
因此,警报应该在刷新,关闭选项卡或关闭整个浏览器时显示.将事件直接设置到<form>将在任何导致破坏此元素的任何内容上启动的元素将是很好的.