من الشائع جدًا استخدام عنوان الويب لمطالبة المستخدمين بالرسائل الجديدة ، مثل Weibo وبعض عناوين البريد الإلكتروني ، والتي تعتبر شائعة جدًا. كيفية تنفيذ وظيفة؟
الفكرة هي: الوصول إلى الخلفية من خلال AJAX. مثال: [لديك أخبار جديدة] و [] تبديل. المحتوى المطري ديناميكي ، لذلك يتم حساب عدد المسافات في النص البديل أيضًا. استخدم مساحات عرض كامل هنا. ومع ذلك ، إذا كان هناك أحرف نصف عرض مثل "الرقم" في الرسالة السريعة ، فستكون هناك مشاكل. المساحات في العرض الكامل أوسع بكثير من عرض نصف العرض 1. وبهذه الطريقة ، لن يكون الأمر مريحًا للغاية في الحل.
لكن document.title = '' ؛ بغض النظر عن عدد المساحات نصف عرض ، يعرض المتصفح واحدة فقط. إذا تم استخدامه ، فإنه يخرج كما هو ؛ احصل على كائن DOM العنوان وقم بتعديله بواسطة T.innerhtml = ''.
ولكن هل ستذهب بسلاسة ، بالطبع لا. سوف يخرجنا دائمًا لتوضيح المتاعب في هذا الوقت. في متصفح IE ، يكون innerhtml للعنوان قراءة فقط (ليس فقط العنوان ، ولكن سمات innerhtml من col ، colgroup ، frameet ، html ، style ، table ، tbody ، tfoot ، thead ، tr هي قراءة فقط). إذا تم إجراء مهمة قسرية ، فسيحدث "خطأ غير معروف في وقت التشغيل". في الوقت الحاضر ، لم أجد حلاً جيدًا للغاية ، لذلك يمكنني فقط إضافة Try {} catch (e) {} للتعامل معه بشكل خاص
شارك رمز المصدر:
نسخة الكود كما يلي:
<script type = "text/javaScript" language = "javaScript">
var flashtitleplayer = {
ابدأ: وظيفة (msg) {
this.title = document.title ؛
if (! this.action) {
يحاول {
this.element = document.getElementSbyTagName ('title') [0] ؛
this.element.innerhtml = this.title ؛
this.action = function (ttl) {
this.element.innerhtml = ttl ؛
} ؛
} catch (e) {
this.action = function (ttl) {
document.title = ttl ؛
}
حذف هذا.
}
this.toggletitle = function () {
this.Action ('【' + this.messages [this.index = this.index == 0؟ 1: 0] + '] مرحبًا بك في السحر الحديث البسيط ") ؛
} ؛
}
this.messages = [msg] ؛
var n = msg.length ؛
var s = '' ؛
إذا (this.element) {
var num = msg.match (// w/g) ؛
if (num! = null) {
var n2 = num.length ؛
n -= n2 ؛
بينما (n2> 0) {
S += "" ؛
N2-- ؛
}
}
}
بينما (n> 0) {
S += '' ؛
ن-- ؛
} ؛
this.messages.push (s) ؛
this.index = 0 ؛
this.timer = setInterval (function () {
flashtitleplayer.toggletitle () ؛
} ، 1000) ؛
} ،
توقف: وظيفة () {
إذا (this.timer) {
ClearInterval (this.timer) ؛
this.Action (this.title) ؛
حذف this.timer ؛
حذف هذا.
}
}
} ؛
وظيفة FlashTitle (msg) {
flashtitleplayer.start (msg) ؛
}
وظيفة stopflash () {
flashtitleplayer.stop () ؛
}
</script>
Firefox ، لا توجد مشكلة تحت Chrome ، لا توجد مشكلة عندما تتم مطالب IE بوجود شخصيات نصف عرض واحدة في الرسالة.