javascript - 用 iFrame 替换所有对象标签 - 第一次替换后停止 - Javascript

标签 javascript jquery windows-8 replacewith

尝试编写一段 Javascript 代码,用 iFrame 替换所有 YouTube 对象标签。相反,我编写的函数将替换第一个 <object> ,然后停止并丢弃所述 <object> 之后的所有内容。

如果我使用不同的元素,例如换行符 <br> ,它将成功替换所有<object>标签为 <br>并且不会丢失任何内容。

function editVideoObjects(htmlContent) {

        // Index all the objects and add ID tags
        var objectTags = htmlContent.querySelectorAll("object");
        var numberOfObjects = objectTags.length;

        for (var r = 0; r < numberOfObjects; r += 1) {
            objectTags[r].setAttribute("id", "video" + r)
        }

        for (var j = 0; j < numberOfObjects; j += 1) {
            var currentObject = htmlContent.getElementById("video" + j);

            var videoEmbed = currentObject.querySelector("embed");
            if (videoEmbed != null) {
                var videoSrc = videoEmbed.getAttribute("src");
                //Script specific for YouTube videos.
                if (videoSrc.split(".")[1] == "youtube") {
                    var newSrc = videoSrc.replace("/v/", "/embed/");
                    var iFrame = document.createElement("iframe");
                    iFrame.setAttribute("src", newSrc);
                    iFrame.setAttribute("height", currentObject.getAttribute("height"));
                    iFrame.setAttribute("width", currentObject.getAttribute("width"));
                    iFrame.setAttribute("frameborder", "0");
                    iFrame.setAttribute("allowfullscreen");
                    iFrame.setAttribute("id", "iFrameVideo" + j);
                    $(currentObject, htmlContent).replaceWith(iFrame);
                    }
            }
        }
    }

最佳答案

找到解决办法了!我将该函数保存为外部文件以附加到 <head>每当调用相应的文章时,都会将其放在主 DOM 中,而不是嵌套在主 Javascript 文件中。

function itemInvoked(e) {
        var currentArticle = articlesList.getAt(e.detail.itemIndex);
        WinJS.Utilities.setInnerHTMLUnsafe(articlecontent, currentArticle.content);
        var videoScript = document.createElement("script");
        videoScript.type = "text/javascript";
        videoScript.src = "/js/videoEditScript.js"
        document.getElementsByTagName("head")[0].appendChild(videoScript);
        articlelist.style.display = "none";
        articlecontent.style.display = "";
        mainTitle.innerHTML = currentArticle.title; 
        WinJS.UI.Animation.enterPage(articlecontent);
    }

关于javascript - 用 iFrame 替换所有对象标签 - 第一次替换后停止 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13573924/

相关文章:

javascript - 如何设置kendogrid组列的宽度

jQuery Validate 1.7 在 jQuery 1.5 上破坏了 $.getJSON() ?

javascript - Web Audio API 事件是否在单独的线程中运行?

javascript - jQuery:在输入集中填充自动完成功能

jquery - 在 jQuery 中设置 -webkit-scrollbar-thumb 可见性

c# - 为什么我不能在720HD中嵌入youtube或在Windows 8 Webview中使用全屏按钮?

javascript - 长时间暂停后恢复应用程序时如何处理场景(未终止)

asp.net - IIS ApplicationPoolIdentity没有对 'Temporary ASP.NET Files'的写权限

javascript - Bootstrap Touchspin 更改事件

javascript - 如何循环浏览一组图像?