|
本帖最后由 hbghlyj 于 2024-9-15 07:51 编辑 \[math\]
問题:有URL参数highlight时,MathJax的上下文菜单没了
分析:
有URL参数highlight时,頁尾會多出一段javascript:
<script type="text/javascript">
var relatedlink = [];relatedlink.push({'sname':查詢的詞, 'surl':''});
relatedlinks('postmessage_12345');
</script>
它調用了common_extra.js中的_relatedlinks函數,該函數把innerHTML做了替换,然後把innerHTML設置回去,DOM仍在,但元素都重新創建了,導致MathJax給公式添加的“右键eventListener”全部丢失了。
- function _relatedlinks(rlinkmsgid) {
- if (
- !$(rlinkmsgid) ||
- $(rlinkmsgid).innerHTML.match(/<script[^\>]*?>/i)
- ) {
- return;
- }
- var alink = new Array(),
- ignore = new Array();
- var i = 0;
- var msg = $(rlinkmsgid).innerHTML;
- msg = msg.replace(
- /(<ignore_js_op\>[\s|\S]*?<\/ignore_js_op\>)/gi,
- function ($1) {
- ignore[i] = $1;
- i++;
- return '#ignore_js_op ' + (i - 1) + '#';
- }
- );
- var alink_i = 0;
- msg = msg.replace(
- /(<a.*?<\/a\>)/gi,
- function ($1) {
- alink[alink_i] = $1;
- alink_i++;
- return '#alink ' + (alink_i - 1) + '#';
- }
- );
- var relatedid = new Array();
- msg = msg.replace(
- /(^|>)([^<]+)(?=<|$)/gi,
- function ($1, $2, $3) {
- for (var j = 0; j < relatedlink.length; j++) {
- if (relatedlink[j] && !relatedid[j]) {
- if (relatedlink[j]['surl'] != '') {
- var ra = '<a href="' + relatedlink[j]['surl'] + '" target="_blank" class="relatedlink">' + relatedlink[j]['sname'] + '</a>';
- alink[alink_i] = ra;
- ra = '#alink ' + alink_i + '#';
- alink_i++;
- } else {
- var ra = '<strong><font color="#FF0000">' + relatedlink[j]['sname'] + '</font></strong>';
- }
- var $rtmp = $3;
- $3 = $3.replace(relatedlink[j]['sname'], ra);
- if ($3 != $rtmp) {
- relatedid[j] = 1;
- }
- }
- }
- return $2 + $3;
- }
- );
- for (var k in alink) {
- msg = msg.replace('#alink ' + k + '#', alink[k]);
- }
- for (var l in ignore) {
- msg = msg.replace('#ignore_js_op ' + l + '#', ignore[l]);
- }
- $(rlinkmsgid).innerHTML = msg;
- }
复制代码 |
|