我正在为现有的XUL应用程序conkeror编写扩展。在那里,在
我正在编写的用户界面的某些部分,我正在创建HTML元素
在这种情况下,固定宽度<span>
,以显示各种结果。
在那些span
内,有一些文字,有时候文字太长了
适合固定的容器。我想切断太长的零件,
并以省略号结束它。
这些span
目前具有以下CSS属性:
display: inline-block;
width: 30%;
overflow: hidden;
white-space: nowrap;
除此之外,我还想使用text-overflow: ellipsis;
,但它会转变
Gecko平台还没有实现。但是,对于纯HTML页面
对于常规样式表,碰巧有一个Firefox和的解决方法
其他基于Gecko的产品,可以切断超长文本并放置文本
无论如何,省略了它的最后工作。
描述了该技术的细节 here。它的 使用Gecko能够运行XUL代码来实现其魔力。
所以我也尝试在我的XUL应用程序中使用它。我改变了我的意见
样式表包括描述的
-moz-binding: url('ellipsis.xml#ellipsis');
,也创造了
如上所述elipsis.xml
文件。
然而,这样做(或类似的事情使用不同的URL,例如chrome://或
绝对文件:// URL)似乎在我的内容中没有任何影响
应用。实际上,它甚至没有尝试访问ellipsis.xml
文件
所有,根据strace。
我正在寻找的是一种拉常规text-overflow: ellipsis;
的方法
在XUL应用程序中跟踪,或者,获得相同结果的方法
没有上述技术。
答案 0 :(得分:2)
对于某些(可能是安全性)原因,您需要在CSS文件中使用chrome://
网址。我用conkeror 0.9.2和xulrunner 1.9.1测试了它。
-moz-binding: url("chrome://conkeror/content/ellipsis.xml#ellipsis");
ellipsis.xml
位于/conkeror/install/path/modules/
的位置(在debian / usr / share / conkeror / modules上)。您可以检查chrome.manifest
文件以找到XML文件的正确位置,可能是样式文件夹。
答案 1 :(得分:1)
你说它没有任何影响吗?
使用
display:block; text-overflow:clip; overflow:hidden; white-space:nowrap;
它至少应该在没有“......”的情况下切断文本。
对xml文件的引用是否正确,css和xml文件是否在同一路径上?
另外,请尝试使用此代码:
<?xml version="1.0"?>
<bindings
xmlns="http://www.mozilla.org/xbl"
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
>
<binding id="none">
<content><children/></content>
</binding>
<binding id="ellipsis">
<content>
<xul:label crop="end"><children/></xul:label>
</content>
<implementation>
<field name="label"> document.getAnonymousNodes( this )[ 0 ] </field>
<field name="style"> this.label.style </field>
<property name="display">
<getter>
this.style.display
</getter>
<setter>
if( this.style.display != val ) this.style.display= val
</setter>
</property>
<property name="value">
<getter>
this.label.value
</getter>
<setter>
if( this.label.value != val ) this.label.value= val
</setter>
</property>
<method name="update">
<body>
var strings= this.textContent.split( /\s+/g )
if( !strings[ 0 ] ) strings.shift()
if( !strings[ strings.length - 1 ] ) strings.pop()
this.value= strings.join( ' ' )
this.display= strings.length ? '' : 'none'
</body>
</method>
<constructor> this.update() </constructor>
</implementation>
<handlers>
<handler event="DOMSubtreeModified"> this.update() </handler>
</handlers>
</binding>
</bindings>