我正在实施Chrome扩展应用.我想用标签(在我的webapp的主页上)用"#"替换href属性.问题是标记可能由ajax动态加载,并且可以由用户操作重新加载.关于如何让chrome-extension检测ajax加载的html内容的任何建议?
我正在编写一个Mozilla Firefox扩展程序(Javascript没有BS必须确定它是IE还是Firefox),我发现自己陷入了以下情况.在页面加载时,我添加如下事件监听器:
extension.addEventListener("DOMContentLoaded", extension.onPageLoad, true);
一旦加载DOM,这将执行m"onPageLoad()"方法,这意味着接收所有数据.这是有效的,但我需要找到一种方法来为DOM 更改时添加一个监听器.扩展应该读取appbrowser窗口中的所有数据,即使通过AJAX调用更新(即:twitter,facebook).
我查看了DOMSubtreeModified事件,但是在初始DOMContentLoaded事件触发后动态添加内容时,这似乎不起作用.
有人曾经克服过这个问题吗?
我的另一种选择(上帝原谅我)是继续使用2秒的超时()来触发相同的函数,重新读取DOM并解析它,但我更愿意只在实际改变时才这样做.
我正在动态生成div,我要检查是否存在动态生成的div?我怎样才能做到这一点?
目前我正在使用以下内容,它不会检测动态生成的div.它仅检测HTML模板中是否已存在包含id的元素.
$(function() {
var $mydiv = $("#liveGraph_id");
if ($mydiv.length){
alert("HHH");
}
});
Run Code Online (Sandbox Code Playgroud)
如何检测动态生成的div?
我正在编写一个Chrome扩展程序,它需要在注入contenteditable我的上下文脚本的页面上检测HTML元素(或用户可以键入的元素).
我现在正在这样做:
var objAll = document.getElementsByTagName("*");
for(var i = 0; i < objAll.length; i++)
{
obj = objAll[i];
if(obj.contentEditable &&
obj.contentEditable != 'inherit' &&
obj.contentEditable != 'false')
{
//Yes, this is a content editable element!
}
}
Run Code Online (Sandbox Code Playgroud)
但我的方法似乎并不适用于我测试过的所有网站.
我很好奇,我在那里错过了什么?
PS.因为它是一个内容脚本,所以我没有使用jQuery来使其更加健壮.
我在我们的网站上进行A/B测试,我做的大部分工作都是在一个JS文件中,在文件顶部加载之前,其他任何东西都被渲染,但是在jQuery加载之后,它有时会派上用场.
举一个非常简单的改变H1标签的例子,我通常会在头部注入一个样式来将H1不透明度设置为0,然后在DOMContentLoaded上,我会操纵H1内容,然后将不透明度设置为1.是为了避免在更改发生之前闪现旧内容 - 隐藏整个对象在眼睛上更优雅.
我已经开始研究MutationObserver API了.我之前在使用覆盖对话框中更改内容时使用过这个用户可以打开的内容,这似乎是一个非常酷的方法,我想知道是否有人设法使用MutationObserver来收听文件,因为它是第一次加载/在首次渲染之前和DOMContentLoaded之前解析并更改文档?
这种方法可以让我更改H1内容而不必隐藏它,更改它,然后显示它.
到目前为止,我已经尝试但失败了,刚刚结束了关于即将到来的突变事件的阅读,并想知道我是否正在尝试做一些不可能的事情.然而,我们(不是我)已经设法将机器人放在火星上,所以我希望我能解决这个问题.
因此,可以使用MutationObservers在加载/解析页面时动态更改HTML内容吗?
感谢您的帮助或任何指示.
问候,尼克
javascript ab-testing optimizely mutation-observers mutation-events
我正在开发一个 chrome 扩展,以便在 URL 后缀与源代码类型(例如 xxx.cpp)匹配的情况下在 Github 站点上进行一些更改
我希望content.js每次选项卡完成加载 DOM 元素时都会运行。但是,它仅在我按下刷新按钮时运行。如果我单击超链接并转到另一个 URL,则content.js不会运行。
我做错了什么?谢谢。
以下是代码。
清单.json
{
"name": "My Chrome Ext",
"description": "change appearance of source code on Github",
"version": "0.1",
"manifest_version": 3,
"permissions": ["storage", "activeTab"],
"action": {},
"content_scripts": [
{
"matches": ["*://github.com/*cpp"],
"all_frames": true,
"js": ["content.js"],
"run_at": "document_end"
}
]
}
Run Code Online (Sandbox Code Playgroud)
内容.js
window.alert("start running content.js");
Run Code Online (Sandbox Code Playgroud) javascript google-chrome-extension chrome-extension-manifest-v3
对于富文本编辑,我有一个UIWebView,我用一些contenteditablediv 加载本地html内容.当用户按下键盘上的某些键时,我想检测该div中的内容更改,相应地调整其大小并正确滚动以将光标定位在键盘上方.
我可以使用onkeyup事件处理程序执行此操作:
<div id="contents" onkeyup="keyup()" onpaste="paste()" contenteditable="true">...</div>
在iOS 8中,键盘现在具有Quicktype面板,其中包含一些建议单词,可快速粘贴到可编辑区域.如何检测将建议文本粘贴到div中的操作?
事件处理程序像onkeyup没有帮助,因为文本粘贴而不按键盘按钮,onpaste事件不被调用.我还尝试实现MutationObserver来在粘贴某些东西时检测DOM更改 - 也没有帮助.
我正在努力寻找有效的解决方案.任何建议表示赞赏.谢谢!
问题:未捕获的类型错误:无法读取未定义的属性“onUpdated”
谷歌浏览器扩展
我的代码:
主文件
我有一个函数 getCookie 和 setcookie
var _a = getCookie("a");
if (_a != "") {
/// do something
} else {
chrome.tabs.onUpdated.addListener(function(tabId , info , tab) {
if (info.status == "complete") {
var _a = document.getElementsByName('id_loaded_page')[0].value;
setCookie("_a", value, 1);
console.log("_a: " +_a);
}
});
}
Run Code Online (Sandbox Code Playgroud) 是否可以轻松检测用户的DOM操作?
当用户在任何现代浏览器中使用控制台时,他/她可以以开发人员不想要的方式操纵DOM.
我有一个与某些状态的DOM非常相关的Web应用程序,如果用户通过控制台对DOM做任何事情,我希望得到通知.
答案:
编辑:
到目前为止,我收到的答案似乎有些混乱.正如上面#2中指出的那样,我知道大多数(如果不是全部)方法都可以被规避.
此外,这是一个内部工具,因此可以通过VPN进行保护.此外,还有服务器端检查.但是,有些原因,我无法详细说明,因为我想知道用户(数量很少)何时操纵DOM.
需要说明的是,这不是出于安全原因.我不想在这里阻止恶意用户.出于好奇,更多地想到这一点.
我正在尝试构建一个基本的 Chrome 扩展程序,该扩展程序从浏览器操作弹出窗口中,在新选项卡中打开一个网站,并填写登录凭据。我可以使用 Chrome 扩展程序打开新页面,但似乎无法将文本输入到输入字段中。
清单文件
{
"manifest_version": 2,
"name": "Vena",
"description": "This extension will allow users to login to vena accounts",
"version": "1.0",
"browser_action": {
"default_icon": "images/icon.png",
"default_popup": "popup.html"
},
"permissions": [
"activeTab"
]
}
Run Code Online (Sandbox Code Playgroud)
弹出窗口.html
<!doctype html>
<html>
<head>
<title>Auto-Login</title>
<script src="popup.js"></script>
</head>
<body>
<h1>Login</h1>
<button id="checkPage">Login!</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
弹出窗口.js
document.addEventListener('DOMContentLoaded', function() {
var checkPageButton = document.getElementById('checkPage');
checkPageButton.addEventListener('click', function() {
var newURL = "https://vena.io/";
chrome.tabs.create({ url: newURL });
var loginField = document.getElementsByClassName('js-email form-control input-lg');
var passwordField = document.getElementsByClassName('js-password …Run Code Online (Sandbox Code Playgroud) javascript ×9
jquery ×3
html ×2
ab-testing ×1
chrome-extension-manifest-v3 ×1
css ×1
dom ×1
dom-events ×1
ios ×1
ios8 ×1
optimizely ×1
tabs ×1
uiwebview ×1
xcode ×1